我有一个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
每次运行该代码时,警报的顺序总是不同!有时“插入更新删除”,有时“更新,删除插入”......
这是一个问题,因为如果删除是最后一个,插入将被删除。那么,这是正常的方式吗?我该如何解决?
答案 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');
});
}