2010-02-03 46 views
4

新來的ajax,所以問一個非常基本的問題。阿賈克斯同步調用超時

- 有沒有辦法讓它設置超時的同步ajax調用(async:false)?

http://www.ajaxtoolbox.com/request/

超時可以完美兼容異步調用,雖然在我的應用程序, 但對於一個特定的情況下,我需要一個同步調用,(JavaScript的實際上應該等待,直到它從服務器聽到後面),這也工作正常。但我需要處理服務器可能需要很長時間才能調用ajax超時的場景。

是否有任何其他標準文檔可以引用ajax?

感謝

+1

任何時候你可能想要一個同步請求,你應該使用一個異步的,並且在回調之後會發生什麼。 – 2010-02-03 20:57:55

+0

我懷疑它會被實現,因爲同步XHR已被正式棄用,儘管它對於某些情況下唯一可用的解決方案,例如在document_start上執行頁面腳本之前將大動態數據傳遞給擴展中的內容腳本。 – wOxxOm 2017-09-28 15:04:13

回答

0

我不相信這是可以設置超時的同步調用。當你設置「async:false」時,我相信瀏覽器在等待響應時實際上鎖定了。如果您絕對需要(因爲瀏覽器鎖定),您應該只使用同步請求。

+0

謝謝!多數民衆贊成在我到處都找到,也 - 有沒有我們可以研究的AJAX的標準api /文檔...? – 2010-02-03 20:50:33

+0

您可以查看XmlHttpRequest的文檔,但最好使用抽象出一堆細節的庫。例如,jQuery有一個很好的AJAX框架。這是我更熟悉的那個。 jquery的AJAX文檔: http://api.jquery.com/category/ajax/ – 2010-02-03 20:52:16

+0

真正的 - 我也使用jquery這個...和文檔沒有明確表示這超時(http:// api .jquery.com/jQuery.ajax /),如果您熟悉驗證框架,我正在嘗試使用它的'remote:'功能來調用服務器進行驗證......問題是我使用onclick事件來驗證窗體一個按鈕(不通過submithandler)和檢查表單錯誤後,我需要重定向到下一頁 - 在這種情況下,它甚至會在遠程返回遲到之前(如果服務器延遲)重定向....所以基本上我想等待那個遠程調用完成 – 2010-02-03 21:03:32

1

基本上,在同步ajax請求期間,瀏覽器被阻塞,並且在瀏覽器被阻止時不能執行javascript。正因爲如此,jQuery無法在設置超時後放棄ajax請求,因爲jQuery是javascript,而且在瀏覽器被阻止時無法執行javascript。這是同步ajax的主要缺陷。

任何時候你可能想要一個同步請求,你應該使用一個異步的,並在回調中發生什麼,如下所示;

$.ajax({ 
    url : 'webservices.php', 
    timeout: 200, 
    dataType : 'json', 
    data : { 
     'cmd' : 'ping', 
    }, 
    success : function(data, textStatus) { 
     $.ajax({ 
      url : 'webservices.php', 
      async: false, 
      dataType : 'json', 
      data : { 
       'cmd' : 'feedback', 
       'data' : data, 
       'userinfo' : window.dsuser 
      }, 
      success : function(data, textStatus) { 
       // success! 
       Status("Thanks for the feedback, " 
        + window.dsuser.user + "!"); 
      } 
     }); 
    }, 
    error : function(jqhdr, textStatus, 
        errorThrown) { 
     Status("There was trouble sending your feedback. Please try again later"); 
    } 
});