使用Jquery等待文件

时间:2011-09-26 11:31:27

标签: jquery ajax

我遇到这种情况,我必须使用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.

那么我如何实现一个侦听器来检查服务器上的某个特定文件,并在用户可用时通知用户。

3 个答案:

答案 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调用。