我的两个ajax同时发送请求

时间:2011-08-15 08:12:00

标签: javascript jquery ajax

我的代码有问题。在我的程序中,我在这里有一个选项框,允许用户选择她/他想要在我的tblPlanktblSummary中显示的页面(tblSummary和tblPlank都是jqgrid)。 Evrytime他选择一个页面并单击一个按钮,它将调用函数displayPageNum。现在,我的问题是,这两个:

url:'processjson.php?path=' + encodeURI('getData/tally/page') + '&json=' + encodeURI(JSON.stringify(datas)),

url:'processjson.php?path=' + encodeURI('getReport/tallySummary') + '&json=' + encodeURI(JSON.stringify(datas)),

同时发送请求,有时会使我的其他表(或其他)不显示正确的输出。那么如何解决这个问题,让它一次发送一个请求呢?

function displayPageNum(){  
 var flag = 0;
  if ($("#page option:selected").text() != 'all'){    
    var datas = {
      "SessionID": $.cookie("SessionID"),
      "dataType":"data",
      "transaction_id":$('.transactionID').attr('id'),
      "page":$("#page option:selected").text()
    };
    $('#tblPlank').setGridParam({
    url:'processjson.php?path=' + encodeURI('getData/tally/page') + '&json=' + encodeURI(JSON.stringify(datas)), 
      datatype: primeSettings.ajaxDataType
    });
    $('#tblPlank').trigger('reloadGrid');     
    flag =1;
    if (flag == 1){
      var datas = {
        "SessionID": $.cookie("SessionID"),
        "dataType":"data",
        "transaction_num":$('.transactionID').val(),
        "page":$("#page option:selected").text()
      };
       $('#tblSummary').setGridParam({
        url:'processjson.php?path=' + encodeURI('getReport/tallySummary') + '&json=' + encodeURI(JSON.stringify(datas)), 
        datatype: primeSettings.ajaxDataType      
      });             
      $('#tblSummary').trigger('reloadGrid');
    }
  }
 }

我把flag变量只是为了一次发送一个请求,但仍然同时发送请求。

2 个答案:

答案 0 :(得分:0)

我可以看到两种方式:

1)同步ajax请求或

2)第一次成功时发送其他ajax请求。

通常它们是异步的。

答案 1 :(得分:0)

更好的是,您可以使用 jQuery Deffered ,这样可以在两个请求完成后成功回调。

var ajax1 = function (){
    return $.get('first.html');
}

var ajax2 = function (){
     return $.get('second.html');
}

$.when( ajax1(), ajax2()).then(function(){
  alert('Both Done!');
});

但是,如果您想确保一次不能发送超过1个请求,则可以跟踪请求对象。

var myRequest;

var ajaxRequest = function () {
    if (!myRequest) {
        var myRequest = $.get('myWebservice.html');
    }
}