我對$ .ajax()使用async:false選項感到困惑。根據$ .ajax()文檔:
從jQuery 1.8開始,不贊成使用帶有jqXHR($ .Deferred)的async:false; 必須使用成功/錯誤/完整回調選項,而不是jqXHR對象的相應 方法,例如jqXHR.done()或不贊成使用的jqXHR.success()。
我不知道jqXHR($ .Deferred)是什麼意思。由於任何原因使用async:false折舊,或者是jqXHR($ .Deferred)某種特殊用例?
我問,因爲我有收到一個$就麻煩了()調用發生asynchronously.This是使用jQuery 1.8.2:
var ret = {};
$.ajax({
async: false,
method: 'GET',
contentType: 'application/json',
dataType: 'jsonp',
url: '/couchDBserver',
error: myerr,
success: function(data) {
var rows = data.rows;
//something that takes a long time
for(var row in rows) {
ret[rows[row].key] = rows[row].value;
}
console.log('tick');
}
});
console.log('tock');
console.log(JSON.stringify(ret))
我的控制檯輸出爲:
滴答
{}
蜱
難道我做錯了什麼,還是我DOI ng something wrong?
我會在'success'函數中放入'tock'代碼和其他所有需要在ajax請求之後運行的代碼。異步AJAX有點馬虎。 – MattDiamant
我想不可能創建同步的'JSONP'請求,因爲它根本不是'AJAX'。我看到你從相同的來源加載數據,有任何使用'JSONP'的理由? – Tommi
我明白這一點,這是我過去試圖避免的。但是,我經常會得到spagetti代碼,這本質上是試圖發出同步請求。有時你需要做出重新評估,評估結果,然後根據你的評估提出另一個請求(無限期)。有什麼我沒有得到有關$ .ajax(),使同步請求一個*壞事*?在這些情況下,我應該使用不同的庫來進行「GET」,「POST」和「PUT」請求嗎? – ddouglascarr