我遇到这种情况,我必须使用JQuery检查服务器上是否存在文件。我可以使用Jquery Ajax来执行此操作,但是我需要一个侦听器来监听服务器上是否存在该文件,如果存在,则触发一些操作。 为了提供更多意义,这是一个例子,
client--> checks on server for file(time 0)--> not present
client--> checks on server for file(time 5)--> not present
client--> checks on server for file(time 10)--> file present--> return some message to client.
那么我如何实现一个侦听器来检查服务器上的某个特定文件,并在用户可用时通知用户。
答案 0 :(得分:6)
您可以使用ajax polling..means以特定的时间间隔检查服务器。
您可以在java脚本中使用setInterval函数来调用特定函数。并在该函数中写入ajax请求。如果找到该文件,只需清除计时器
检查示例代码
var timerForLoadingResult= setInterval(checkServerForFile,4000);//call the fnction in every 4 seconds.write ajax in that function.
function checkServerForFile() {
$.ajax({
type: "POST",
cache: false,
url: url,
success: function (result) {
if(check result) //if the file is on server
{
//do something
clearInterval(timerForLoadingResult) // clear timer
}
; }
});
}
答案 1 :(得分:2)
在jQuery 1.5中添加了根据服务器返回的HTTP状态代码运行不同功能的能力。因此,如果服务器以200执行响应,则执行文件存在时所需的函数,如果它返回404,则执行所需的函数(如果不存在)。
$.ajax({
statusCode: {
404: function() {
// file not found
},
200: function() {
// file found
}
}
});
有关详细信息,请参阅jQuery文档中的jQuery.ajax。
编辑:从您的评论中我可以看到您需要继续检查,直到该文件存在。如果是这样,只需将请求包装在函数中,然后在找不到该文件时调用该函数。使用setTimeOut,否则您将通过连接请求向服务器发送垃圾邮件。
答案 2 :(得分:0)
我会根据请求启动一个侦听器线程并传入一个状态对象,侦听器在检测到该文件后会更新该对象。同样在UI线程上,如果状态对象由侦听器线程更新并执行必要的操作,我将检查状态对象的状态。 UI线程基本上是一个定时器上的jQuery ajax调用。