Javascript ajax请求的顺序总是不同的
我有一个javascript代码,它必须请求数据库(ajax)。但是我发现插入错误,但是sql请求正确。因此,我添加了一个警报,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,
$.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的解决方案,但是你提到的每一个函数都非常有趣,我以后可能会用到它们。谢谢