2012-11-30 28 views
6

我一直在調用ajax錯誤函數時遇到一些問題,而腳本需要一段時間才能加載。但我能夠通過添加async: false來修復它。

E.g:

$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false, 
    data: { 
     'id': id 
    }, 
    dataType: 'json', 
    success: function(output) { 
     // success 
    }, 
    error: function() { 
     alert('Error, please refresh the page'); 
    } 
}); 

當讀取它說的文檔:

默認情況下,所有的請求都異步發送的(即它被設置爲 真默認情況下)。如果您需要同步請求,請將此選項設置爲 false。跨域請求和dataType:「jsonp」請求不支持 同步操作。請注意,同步請求可能會暫時 鎖定瀏覽器,禁用任何行動,同時請求 處於活動狀態。從jQuery 1.8開始,不贊成使用jqXHR ($ .Deferred)的async:false;您必須使用完整/成功/錯誤 回調。

Q)是什麼最後部分意味着大約jqXHR($ .Deferred)?這會影響我的腳本嗎?

回答

5

它不會影響您的腳本。

這意味着,執行同步AJAX請求時,一個不應該使用deferred API由$.ajax()返回(例如像done()fail())的對象公開,但依靠completeerror處理程序來代替。

換句話說,您的代碼已經使用了正確的模式。你將不得不修改它,如果它使用延遲的操作,如:

// Do not write this code. 
$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false,   // <-- Synchronous request. 
    data: { 
     'id': id 
    }, 
    dataType: 'json' 
}).done(function(output) { // <-- Use of deferred method. 
    // success 
}).fail(function() {  // <-- There also. 
    alert('Error, please refresh the page'); 
}); 
+0

謝謝,只是想確保我的代碼不會在未來的jQuery –