2010-06-25 68 views
0

我想向服務器發送Ajax請求,服務器會回覆作業狀態和結果。如果狀態爲「錯誤」或「確定」,則客戶端應向用戶顯示結果(包含HTML代碼)。但是,如果狀態爲「正在等待」,則客戶端應等待幾秒鐘,然後再自動發送相同的Ajax請求。這應該繼續,直到它超時或得到「錯誤」/「確定」消息。不斷從服務器通過Ajax提取結果,直到超時或獲取結果

對於這樣的解決方案/代碼片段的任何想法?我目前使用Rails,JQuery和Prototype。非常感謝。

回答

2

你可以這樣做

(function refresh(){ 
    $.ajax({ 
     url:  '/myfile', 
     data:  'data', 
     dataType: 'text', 
     type:  'POST', 
     success: function(data){ 
      if(data === 'Waiting') 
      setTimeout(refresh, 5000); 
      else 
      alert(data); 
     } 
    }); 
})(); 

這將啓動self-executing anonymous function有一個Ajax請求。如果返回的字符串等於Waiting它將設置超時5秒並再次調用自己。

+0

感謝您的提示。我使用.getJSON()而不是.ajax()。這裏的關鍵實際上是setTimeout()。 – Mountain 2010-06-28 15:56:32

0

的Javascript:

var t = setInterval('checkServer', 5000) 

function checkServer() { 

    $.ajax({ 
    url: 'yoururl', 
    data: params, 
    success: function(resp) { 
     if(resp == "Error" || resp == "OK") { 
     alert(resp); 
     clearInterval(t); 
     } 
    } 
    }); 
} 
0

沒有完全理解我認爲你需要確保獲得來自服務器的響應不是關鍵應用程序的背景是,你可能沒有必要依靠重試出現在「等待」的迴應案例中。例如,如果用戶離開頁面,腳本可能會被卸載並且重試不會發生。

如果看起來像是預計可能長時間運行的作業,那麼最好只返回一個HTTP狀態OK,並允許稍後以同步或異步方式檢索內容。

您也可以考慮使用HTTP標頭屬性來提供響應,而不是將內容與響應數據一起內聯。