使Ajax请求递归 - 检查文件是否存在

时间:2011-09-20 14:03:26

标签: javascript jquery ajax recursion

基本上只是想查看服务器上是否存在特定的txt文件,如果存在,请进行进一步处理;但是,我不认为我的递归是正确的,所以有人可以提供一些指示 - 这就是我所拥有的:

function fileExists(filename) {
    $.ajax({
        type: 'HEAD',
        url: 'http://www.example.com/system/'+filename+'.txt',
        success: function() {
            // Further processing if file exists
        },  
        error: function() {
            // File does not exists, run through function again-
            return arguments.callee(filename);
        }
    });
}

这是非常基本的,事先有一些处理实际创建文件;但问题是它是FTP到我们的域,这意味着时间可能会有几秒钟的变化,所以基本上我只是想让它重新检查,直到它看到该文件存在。我稍后会修改它来控制堆栈,可能会设置超时半秒或者其他东西,但是我用javascript来说不是很好,所以我需要一些指针来使这个递归。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

问题是当您尝试通过fileExists再次致电arguments.callee(fileName)时,error方法的范围并非您认为的那样。

只需致电fileExists即可。

另一个你将拥有的是,如果你的服务器很快,你将会发出大量的请求。您可能希望在请求之间等待一段时间。因此,请error包含

setTimeout(function(){
    console.log('trying again....'); // this won't work in IE, I *think*
    fileExists(filename);
}, 1000); // try again in a second

最后,您应该意识到,如果服务器返回500,则仅调用error回调.500代码通常表示您的服务器上存在错误。如果文件不存在,您应该返回json以指示该文件不存在,并在success回调中处理该情况。

答案 1 :(得分:1)

error: function() {
            fileExists(filename); 
        }