мои два аякса отправляют запрос одновременно - PullRequest
0 голосов
/ 15 августа 2011

У меня проблема с моим кодом.В моей программе у меня есть поле опции, которое позволит пользователю выбрать, какую страницу он / она хочет показать в моих tblPlank и tblSummary (оба tblSummary и tblPlank были jqgrid).Каждый раз он выбирает страницу и нажимает на кнопку, она вызовет функцию 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 голосов
/ 15 августа 2011

Еще лучше, вы могли бы использовать 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');
    }
}
0 голосов
/ 15 августа 2011

Я мог видеть два пути:

1) Синхронный запрос ajax или

2) Отправьте другой запрос ajax при первом успешном выполнении.

Обычно они асинхронные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...