如何在jQuery异步工作中停止$ .post?

Jen*_*r82 5 ajax jquery

我有以下电话:

getData(0);
getData(1);
getData(2);
Run Code Online (Sandbox Code Playgroud)

这些调用javascript函数:

function getData(Code) {
  $.post('/adminA/GetData',
                { Code: Code },
  function (data) {
Run Code Online (Sandbox Code Playgroud)

问题是我的数据无序返回.有没有办法让我按顺序返回数据?

Cha*_*ndu 17

另一种方法是使用ajaxSetup

function getData(Code) {
  $.ajaxSetup({async: false});
  $.post('/adminA/GetData',{ 
        Code: Code },  function (data) {
         // Do Something
        }); 
   $.ajaxSetup({async: true}); //So as to avoid any other ajax calls made sybchrounously
}
Run Code Online (Sandbox Code Playgroud)


Bem*_*mmu 9

您可以使用$ .ajax,并将async设置为false.


Ste*_*hen 6

同步调用这三个ajax请求将冻结您的浏览器.你最好使用jQuery的Deferred对象.试试这个:

function getData(Code) {
    return $.post('/adminA/GetData', { Code: Code }, function (data) {/*etc.*/});
}

getData(0).done(function() {
    getData(1).done(function() {
        getData(2);
   });
});
Run Code Online (Sandbox Code Playgroud)

附录

您还应该考虑将您的调用组合成一个,并更改服务器逻辑以处理它.这最终将比三个请求更快:

function getData(firstCode, secondCode, thirdCode) {
    $.post('/adminA/GetData', {
        codeOne   : firstCode,
        codeTwo   : secondCode,
        codeThree : thirdCode
    }, function (data) {/*etc.*/});
Run Code Online (Sandbox Code Playgroud)