2011-06-09 17 views
3

我在一些頁面上的地方做通過jQuery的load()的一些內容替換。如何讓jQuery的自動重試的load(),如果失敗?

<script> 
    $(document).ready(function(){ 
    $('#row').load('/getStudentDetails',{studentId:3}); 
    }); 
</script> 

在我的開發服務器上的東西完美的工作。在我的實時服務器上,有時會給我一個「請求無效」的錯誤,我可以在螢火蟲中看到。我認爲服務器已經不堪重負,或者一些緩存模塊可能會與多個請求混淆。我會盡力單獨弄清楚這個問題,也只是希望它重試相同的請求(一次),如果失敗。有沒有一個漂亮的jQuery方法來做到這一點?

回答

1

我不會稱它爲光滑的,但你可以使用$.load的回調函數。如果狀態爲error,你可以重做的負荷。

<script> 
$(document).ready(function(){ 
    $('#row').load('/getStudentDetails',{studentId:3}, function(response, status, xhr) { 
    if(status == 'error') { 
     $('#row').load('/getStudentDetails',{studentId:3}); 
    } 
    }); 
}); 
</script> 
+0

這並不美觀,但它確實完成了工作。謝謝 – 2011-06-09 23:11:57

3

像這樣的事情可能會爲你工作。

function doAjax() { 
    $.ajax({ 
     url: '/path/to/file', 
     type: 'GET', 
     dataType: 'html', 
     data: {studentId : 3}, 
     error: function(xhr, textStatus, errorThrown) { 
      setTimeout('doAjax()', 5000); 
     } 
    }); 
} 

如果您的服務器得到淹沒我會建議使用的setTimeout延遲再次開始前等待一點點,否則會更難捶你的服務器。

編輯:我沒有注意到你只說了一次。你可以將setTimeout包裝在一個計數器中,所以遞歸不會重複。或者如果你決定讓它繼續嘗試,這是一個很好的方式,直到你得到迴應。

相關問題