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! 成功 }); });