我知道您要求使用 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>
您将需要像javac "path/to/readTextFile.java"
在 cmd.exe 中一样编译 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 的任何位置下方(但不在上方)
请注意,文本文件将获得同样多的疯狂点击(但没有办法解决),但您的页面不会获得疯狂点击。