我已经看过类似的问题,但还没有完全找到我正在寻找的东西…
我有一个用PHP编写的网页,我需要显示外部.txt文件的内容,我需要刷新一次,比如说,20秒,因为.txt文件的内容定期变化。
我已经能够通过放入一个IFRAME并使用PHP include来显示文件的内容来实现这一点。然后,我每隔20秒刷新一次包含页面。
这工作得很好,除了,IFRAME刷新正在对我的网站统计造成严重破坏,因为刷新的数量,ehcih计数对页面浏览量。
我可以使用,比如说,AJAX或其他东西来做这件事吗?我敢肯定他们可能是另一种方式来做这件事,而不会严重影响我的统计数据,也不会对服务器造成太大的负载?
请提供尽可能多的具体说明,因为我已经花了几天的时间来获得我已经拥有的东西!
首先要感谢大家!
发布于 2012-04-16 11:09:01
我知道您要求使用Ajax/JavaScript,但是Java applet可以在大多数桌面浏览器上使用,而这个任务在Java中会非常简单,所以我给出了一个使用Java applet的示例。
// PHP/HTML embed code
<APPLET CODE="readTextFile.class" width=400 height=300>
<PARAM NAME="fileToRead" VALUE="<?php echo $textfile ?>">
Your browser does not support the <code>applet</code> tag.
</APPLET>
您将需要像cmd.exe中的javac "path/to/readTextFile.java"
一样编译java文件
// readTextFile.java
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class readTextFile extends Applet {
String fileToRead = "path/to/myfile.txt";
StringBuffer strBuff;
TextArea txtArea;
public void init(){
txtArea = new TextArea(300, 400);
txtArea.setEditable(false);
add(txtArea, "center");
// First try the HTML applet parameter, if not use fileToRead variable
String prHtml = this.getParameter("fileToRead");
if (prHtml != null) fileToRead = new String(prHtml);
// Set up a timer to read the file every 20 seconds
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
public void run() {
readFile();
}
}, 0, 20*1000);
}
public void readFile(){
String line;
URL url = null;
try{
url = new URL(getCodeBase(), fileToRead);
} catch (MalformedURLException e) {
//handle or do nothing
}
try {
InputStream in = url.openStream();
BufferedReader bf = new BufferedReader(new InputStreamReader(in));
strBuff = new StringBuffer();
while((line = bf.readLine()) != null){
strBuff.append(line + "\n");
}
txtArea.append("File Name : " + fileToRead + "\n");
txtArea.append(strBuff.toString());
} catch(IOException e) {
e.printStackTrace();
}
}
}
它将每隔20秒从您的服务器读取一次文件。只需确保您尝试访问的文件位于放置readTextFile.class的同一文件夹或以下(但不在上面)中
请注意,文本文件将获得同样多的疯狂点击(但这是没有办法的),但您的页面不会获得疯狂的点击。
发布于 2012-04-16 11:09:33
如果您正在使用jquery,您可以尝试以下代码:它将获取文本文件,并将内容放入带有id textdiv的div中
<script type='text/javascript'>
var doInterval;
function getfile() {
$.ajax({
url: "file.txt",
complete: function(request){
$("#textdiv").html(request.responseText);
}
});
}
doInterval = setInterval(getfile, 20000);
</script>
<div id="textdiv"></div>
发布于 2012-04-16 11:08:33
你当然可以在PHP中使用像Comet/Long Polling这样的东西,但是正如the accepted answer to this question提到的,当使用Apache作为服务器时,有一些注意事项。
如果您不局限于PHP,您可以使用socket.io,它非常适合这项事业。此外,如果您没有太多的客户端,Comet仍然适合您。
https://stackoverflow.com/questions/10172871
复制相似问题