Javascript ajax请求的顺序总是不同的

Javascript ajax请求的顺序总是不同的,javascript,jquery,ajax,Javascript,Jquery,Ajax,我有一个javascript代码,它必须请求数据库(ajax)。但是我发现插入错误,但是sql请求正确。因此,我添加了一个警报,ajax请求知道代码何时执行 代码如下: $.post("/kohana-v3.3.5/ajax/update_simulation", { id_simulation: id_simulation, nom_simulation: nom_simulation,

我有一个javascript代码,它必须请求数据库(ajax)。但是我发现插入错误,但是sql请求正确。因此,我添加了一个警报,ajax请求知道代码何时执行

代码如下:

$.post("/kohana-v3.3.5/ajax/update_simulation", {
                    id_simulation: id_simulation,
                    nom_simulation: nom_simulation,
                    sol_simulation: sol_simulation,
                    station_simulation: station_simulation,
                    iteration_simulation: iteration_simulation,
                    scenario_simulation: scenario_simulation
                }
                , function (result) {
                    console.log(result);
                    alert('update');
                });

$.post("/kohana-v3.3.5/ajax/delete_pousses", {id_simulation: id_simulation}, function (result) {
                console.log(result);
                alert('delete');
            });

$(this).prev('div').find('table .formRows').each(function (i) {
                            alert('here');
                            if (cpt % 2 == 1) {
                                //interculture
                                var $tds = $(this).find('td option:selected'),
                                    culture = $tds.eq(0).val(),
                                    date = $tds.eq(1).text();
                                itk = null;
                            } else {
                                //culture
                                var $tds = $(this).find('td option:selected'),
                                    culture = $tds.eq(0).val(),
                                    itk = $tds.eq(1).val();
                                date = null;
                            }

                            $.post("/kohana-v3.3.5/ajax/insert_pousses", {
                                id_simulation: id_simulation,
                                culture: culture,
                                date: date,
                                itk: itk,
                                rang: cpt
                            }, function (result) {
                                console.log(result);
                                alert('insert');
                            }); //Fin du post

                            cpt++;


                        }); //Fin du each
每次我运行该代码时,警报的顺序总是不同的!有时“插入更新删除”,有时“更新,删除插入”


这是一个问题,因为如果删除是最后一个,插入将被删除。那么,这是一种正常的方式吗?我应该如何解决它呢?

javascript可以异步执行——这就是为什么ajax请求不总是以相同的顺序执行的原因。您可以将它们设置为nyc false(如下所示),或者做出类似于承诺()的操作,以等待ajax调用完成


问候语

AJAX请求是异步的,因此如果您将它们作为兄弟触发,则无法保证订单

为了保证一个固定的顺序,您需要从它的前一个成功块进行后续调用。大概是这样的:

$.post('/ajax/method1', { params: params }, 
  function(result) {
    $.post('/ajax/method2', { params: params }, 
      function(result) {
        $.post('/ajax/method3', { params: params }, 
          function(result) {
          });
      });
  });

在前一个方法成功之后,您需要调用post-ajax方法

比如:

 $.post("/kohana-v3.3.5/ajax/update_simulation", {
                id_simulation: id_simulation,
                nom_simulation: nom_simulation,
                sol_simulation: sol_simulation,
                station_simulation: station_simulation,
                iteration_simulation: iteration_simulation,
                scenario_simulation: scenario_simulation
            }
            , function (result) {
                console.log(result);
                alert('update');
    dleteajax();
            });

 function dleteajax()
 {
 $.post("/kohana-v3.3.5/ajax/delete_pousses", {id_simulation: id_simulation},               function (result) {
            console.log(result);
            alert('delete');
        });
  }
您可以使用.promise“观察绑定到集合的特定类型的所有操作(无论是否排队)何时完成。”

示例函数

function testFunction() {
    var deferred = $.Deferred();

    $.ajax({
        type: "POST",
        url: "",
        success: function (data) {

           deferred.resolve(data);
        }
    });
    return deferred.promise();
}
function CallingFunction() 
{
     var promise = testFunction();

     promise.then(function (data) {

         //do bits / call next funtion
     }
}
调用函数

function testFunction() {
    var deferred = $.Deferred();

    $.ajax({
        type: "POST",
        url: "",
        success: function (data) {

           deferred.resolve(data);
        }
    });
    return deferred.promise();
}
function CallingFunction() 
{
     var promise = testFunction();

     promise.then(function (data) {

         //do bits / call next funtion
     }
}
更新

这也可以帮助您解决以下问题:

“注册一个在所有Ajax请求完成时调用的处理程序。”

最后一个注释:


从jQuery1.8开始,不推荐使用async:false,与$.Deferred一起使用。

ajax中的
a
代表
异步。这意味着post请求的执行将不会按顺序运行。我试过了,但是第三个
post
实际上是在一个函数中,该函数在一个表中循环。我编辑了我的文章让你看。@Erlaunis应该也一样。或者你可以把它们分成完全不同的函数,然后依次调用每个函数。好吧,我对ajax的success函数中的
$(this)
有一个问题。但是我修好了!谢谢:)我使用了GalacticCowBoy的解决方案,但是你提到的每一个函数都非常有趣,我以后可能会用到它们。谢谢