2011-09-20 63 views
0

基本上只是查看服務器上是否存在特定的txt文件,如果存在,請進行進一步處理;不過,我不認爲我的遞歸是正確的,所以有人可以提供一些指針 - 這裏就是我有:使Ajax請求遞歸 - 檢查文件是否存在

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

問題是當您嘗試再次通過arguments.callee(fileName)調用fileExists時,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的500代碼通常意味着有您的服務器上的錯誤error回調僅被調用。如果一個文件不存在,你可能應該返回json來指示該文件不存在,並在回調中處理該情況。

+0

我該如何檢查404?只是簡單地看jQuery的AJAX網頁我看,你可以指定特定的狀態碼,ie' $阿賈克斯({ 的StatusCode:{ 404:函數(){ 警報( '找不到網頁');} } });' 看來我被困在一個常量循環中,我按照您的指示設置了1秒的超時時間,並且拋出一個警報以確保它正在執行(它是),但是我我從來沒有收到過成功。 –

+1

@pennstate_fanboy那麼該文件永遠不會被上傳。如果你想返回一個404,那麼你引用的代碼是正確的方向。你也可以在每次檢查時增加一個嘗試變量,如果嘗試次數大於n,你決定一個合理的n。 – hvgotcodes

+0

我喜歡嘗試變量的概念 - 可能會實現類似的東西。然而,它是否更有意義,而不是使用'success()'和'error()'來檢查狀態碼 - 即'200'(做處理)和'404'(重複函數)? –

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