我创建的代码:
$("button").click(function(){
for (var i=0;i<array.length;i++){
var text = array[i];
$.post("process.php",
{ data : text},
function(data){
if (data="success"){
alert("success");
} else {
alert(data);}
});
}
});
是工作但不根据数组索引连续发送数据(文本)。我不能一个一个地发送它,因为数组长度将由用户输入。如何根据其数据的数组索引连续发布ajax帖子?而且,这也很重要,如何在最后一个请求中检测onComplete()事件?提前谢谢。
答案 0 :(得分:1)
如果数据必须按顺序到达,那么您需要延迟执行进一步的POST,直到前一个POST完成其轮次;你可以通过多种方式实现这一点,但最好的选择可能是执行AJAX POST并接受下一个项目/索引或其他任何参数的函数,并在success
回调函数上调用自身。 AJAX电话。
function submitData(items, index) {
if (index < items.length) {
$.post(
"process.php",
{ data : items[index] },
function(data) {
submitData(items, ++index);
}
);
}
}
然后致电:
submitData(items, 0);
答案 1 :(得分:1)
最干净的解决方案(恕我直言)是一个递归回调循环 - 您只需在上一次AJAX调用完成时触发上一个数据上传。
$('button').click(function() {
var a = array.slice(0);
(function loop() {
var text = a.shift();
if (typeof text !== 'undefined') {
$.post(url, {data: text})
.done(function(data) {
// use result
...
}, loop); // and iterate
}
})(); // start the loop immediately
});
上面的代码利用了.done
延迟对象方法,并传递了两个回调 - 一个是传统的“成功”回调,第二个是触发伪递归回调{{1功能。