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

时间:2011-06-13 03:41:01

标签: jquery ajax

我有以下电话:

getData(0);
getData(1);
getData(2);

这些调用javascript函数:

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

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

5 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:9)

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

答案 2 :(得分: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);
   });
});

附录

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

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

答案 3 :(得分:2)

您可以使用jQuery文档中的$.ajaxSetup({ asynch: false })

jQuery.ajaxSetup(选项)

 
 
选项
一组配置的键/值对  默认的Ajax请求。所有选择  是可选的。

这将使用jQuery为所有ajax请求设置选项。

答案 4 :(得分:0)

正如另一个答案所说,您可以使用$ .ajax代替并将async设置为false。但是,这将挂起浏览器,直到所有调用完成。我会改为让每个ajax调用在其回调中调用下一个。这样它保持异步,因此不会挂起浏览器。

类似的东西:

 function getData(Code) {
    $.post('/adminA/GetData',
                { Code: Code },
                function (data) {
                    getData(Code+1)
                });
 }

显然有什么要告诉它何时终止。