1.將async設置為false,最簡單的方法,但是如果執行的ajax調用過多,瀏覽器會卡死。
2.使用$.when().done().then()。簡單測試的代碼如下
function GetBatchAjax(id) { var ajax=$.ajax({ type: "POST", dataType: "json", data: "id=" + id, url: '@Url.Action("Search","Index")' }); return ajax; } $('#PromiseGetPeopleInfo').click(function() { $.when(GetBatchAjax(1)).done(function (oneResult) { console.log(oneResult); $.when(GetBatchAjax(2)).done(function (twoResult) { console.log(twoResult); }).fail(function() { }); }).fail(function() {
}); });
3.使用promise
function GetPromise() { return new Promise(function (resolve, reject) { //當異步代碼執行成功時,我們才會調用resolve(...), 當異步代碼失敗時就會調用reject(...) //在本例中,我們使用setTimeout(...)來模擬異步代碼,實際編碼時可能是XHR請求或是HTML5的一些API方法. setTimeout(function () { resolve("執行完畢"); //代碼正常執行! }, 2500); }); } //點擊調用 $('#PromiseTest').click(function () { var myFirstPromise = GetPromise(); myFirstPromise.then(function (successMessage) { //successMessage的值是上面調用resolve(...)方法傳入的值. //successMessage參數不一定非要是字符串類型,這里只是舉個例子 Yay! 成功 console.log("Yay! " + successMessage); //Yay! 成功 }); });