ajax请求的顺序总是不同的

时间:2016-05-19 14:20:34

标签: javascript jquery ajax

我有一个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

每次运行该代码时,警报的顺序总是不同!有时“插入更新删除”,有时“更新,删除插入”......

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

4 个答案:

答案 0 :(得分:4)

javascript可以异步执行 - 这就是为什么你的ajax请求并不总是以相同的顺序执行的原因。您可以将它们设置为asnyc false(例如此处jQuery: Performing synchronous AJAX requests)或制作类似promises(https://api.jquery.com/promise/)的内容以等待ajax调用完成。

问候

答案 1 :(得分:3)

AJAX请求是异步的,因此如果您将这些请求作为兄弟姐妹触发,则无法保证订单。

为了保证固定订单,您需要从其前任的成功块进行后续调用。像这样:

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

答案 2 :(得分:3)

您可以使用.promise“观察某个类型的所有操作绑定到集合,排队与否,都已完成。”

https://api.jquery.com/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
     }
}

<强>更新

这也可以帮助你:

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

https://api.jquery.com/ajaxStop/

$(document).ajaxStop(function () {

});

最后说明:

从jQuery 1.8开始,不推荐使用async:false,使用$ .Deferred。

答案 3 :(得分:1)

你需要在之前的成功之后调用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');
        });
  }