2013-03-27 29 views
1

我們正在開發一個跟蹤系統,它使用WordPress AJAX API在WordPress環境中進行3次ajax調用,並在第3次調用它刷新頁面。AJAX和200 OK消息:他們是否需要完成服務器端呼叫?

我注意到,有時我的數據錄入嘗試在後端失敗,我假設(這可能是錯誤的),這是因爲我們的最終Ajax調用在前一個獲得200 OK清除之前完成,並斷開連接,這意味着數據永遠不會被存儲。

現在我的印象是,只要一個jQuery.ajax({type:'POST')調用被髮布,我可以立即關閉頁面,並且我發佈的服務器端仍然會收到並處理數據,無論發生了什麼變化,我的數據測試顯示一些數據沒有得到一致的輸入,我是否認爲這不應該與我最終的AJAX調用完成(並重新加載頁面)有關,先前AJAX調用前用200 OK清除?

感謝您的幫助!

+0

是第一'GET'的'success'回調裏面的第2'GET'等。另外,請不要來代碼或更好的,一個[Fiddle](http://jsfiddle.net)或[Plunk](http://plnkr.co)的上下文。 – couzzi 2013-03-27 02:50:27

+0

如果您在不等待第一個響應的情況下連續進行3次呼叫,則不會保證該請求將按其發送順序進行處理。 – 2013-03-27 03:28:50

+0

對此的解決方案是鏈接請求,以便第一個請求的成功回調發送第二個請求 – 2013-03-27 03:29:28

回答

1

是,如果您發送ajax請求到服務器,您可以關閉該頁面,服務器將完成請求(執行代碼)。

但有一點你必須知道,你不知道你的請求是否到達服務器。

jQuery.ajax("htpp://",{type: 'POST'}); 

這是一個異步請求,所以它會在後臺執行的代碼。執行這行代碼並不意味着你已經發送了請求。它有一些階段在後臺工作。

  1. jQuery將分析你的代碼,看你想要什麼,
  2. 這將創建一個XMLHttpRequest對象,高於設定選項。
  3. 最後它會發送請求的服務器。

因此,如果您在第三階段之前立即關閉該頁面,則不會發送請求。

我建議您發送一個同步ajax請求並等待刷新/關閉頁面的任何響應。由於同步Ajax請求可能會暫時鎖定瀏覽器,請求處於活動狀態時禁用任何操作。

jQuery.ajax()必須設置異步假,使其同步,這樣,

jQuery.ajax({ 
    url: Url, 
    success: function(r) {}, 
    async:false 
    }); 
+0

謝謝ocanal,這有助於很多。 – atwellpub 2013-03-28 16:14:03

相關問題