如何使用ajax替代方法按顺序运行$ .post请求

时间:2017-08-13 05:02:20

标签: javascript php jquery ajax

是否可以同步执行$ .post请求?我有以下代码:

function loadTest() {

var questionIDs = [];

var count = 0;

console.log("getting test");
$.post("db.php", function(data) {
    obj = jQuery.parseJSON(data);

    var questionCount = obj.length;

    console.log(obj);

    while (count != questionCount) {

        questionIDs.push(obj[count].id);
        count++;
    }
    console.log(questionIDs);

    // $('#question').html(obj[0].question);
});

$.post("getChoices.php", {
    IDs: questionIDs
}, function(data) {
    console.log(data);
    obj = jQuery.parseJSON(data);

    console.log(obj);

    while (q < 3) {
        console.log("question");
        var w = 1;
        while (w < 5) {

            console.log(obj[q][w]);
            w++;
        }
        q++;
    }

    // $('#question').html(obj[0].question);
});

}

由于$ .post函数是非同步运行的,因此变量questionID在发送时将为空。有没有可能的解决方案,不需要从$ .post更改为ajax?我在这里尝试了各种解决方案,但我似乎无法让它们发挥作用。

1 个答案:

答案 0 :(得分:1)

确保在第一个请求得到响应后再发出第二个请求。将第二个请求放在第一个请求回调中。像这样:

function loadTest() {

  var questionIDs = [];

  var count = 0;

  console.log("getting test");
  $.post("db.php", function(data) {
    obj = jQuery.parseJSON(data);

    var questionCount = obj.length;

    console.log(obj);

    while (count != questionCount) {

      questionIDs.push(obj[count].id);
      count++;
    }
    console.log(questionIDs);

    //      $('#question').html(obj[0].question);

    $.post("getChoices.php", {
      IDs: questionIDs
    }, function(data) {
      console.log(data);
      obj = jQuery.parseJSON(data);

      console.log(obj);

      while (q < 3) {
        console.log("question");
        var w = 1;
        while (w < 5) {

          console.log(obj[q][w]);
          w++;
        }
        q++;
      }

      // $('#question').html(obj[0].question);
    });
  });
}