jQuery post - 等待响应
我在循环中使用基本的jQuery post请求。jQuery post - 等待响应
for (i = 1; i < 2; i++) {
for (ii = 0; ii < 2; ii++) {
$.post("url", 'some data')
.done(function(data) {
if(data.length > 2){
$("#datagot").append(ii);
}
});
}
}
我需要的II变量传递到中,.done功能,但剧本没有等到请求完成,所以二是不正确的为每个请求。
我该如何做到这一点?有什么办法可以通过ii作为参数,任何想法?
否for循环是同步的,这意味着在ii = 0时,$ .post将运行。只要运行$ .post,ii = 1就会发生,$ .post就会运行。
ii = 0的.done可能在2分钟后出现,ii = 1的done可能在1分钟前出现,反之亦然。你不可能知道其中 .done会先发生,或者当它们会发生。
要“知道”完成了.done中的哪个ii,您需要将$ ii的值传递给$ .post数据,并将其返回。返回数组是一种简单的方法。例如:
.done(function(data) {
let dataii = data[0];
let datagot = data[1];
if(datagot.length > 2){
$("#datagot").append(dataii);
}
}
我认为这是错误的做法,从你的代码你正在做2后呼吁每个II从0到2,所以0和1个于是两个Ajax调用,您需要递延对象等等这样,如果他们是异步
$.when(callOne(),callTwo()).then(function(answerOne,answerTwo){
if (answerOne == 'answerOneReturned' && answerTwo =='answerTwoReturned'){
$("#datagot").append(answerOne);
$("#datagot").append(answerTwo);
}
});
function callOne(){
return $.ajax({
url:'myUrl.php',
type:'POST',
dataType:'html'
}).then(function(data) {
if (data == 'something'){
myAnswer = 'answerOneReturned';
}
return myAnswer;
});
}
function callTwo(){
return $.ajax({
url:'myUrl.php',
type:'POST',
dataType:'html'
}).then(function(data) {
if (data == 'something'){
myAnswerTwo = 'answerTwoReturned';
}
return myAnswerTwo;
});
}
同样功能的事情上面,如果他们是同步的,但你必须使用此书面syncronous
$.when(callOne()).then(function(answerOne){
if (answerOne== 'answerOneReturned'){
return callTwo();
}
}).then(function(answerTwo){
if (answerTwo== 'answerTwoReturned'){
//Do append
}
});
必由之路精确的递延对象允许做,例如,10 ajax调用异步,但处理所有的答案,并指挥你想要的地方...所以如果anwserOne是A和answerTwo是B做答案中的一件事是C和answerTwo ID D做另一件事.... ....等..等等......
对不起,但这是什么意思? ?
for (i = 1; i < 2; i++) {
这是没有必要对于i = 1和轻微或2这是没有必要....
两个简单的解决方案:
1)使用let ii = 0
。由于声明为let
的变量仅存在于声明块的上下文中,因此将为循环的每次迭代重新创建ii
。循环因此后续迭代不会改变其价值,而是对自己的ii
副本行事:
for (let ii = 0; ii < 2; ii++) {
...
}
2)使用partial application。只需使用Function.prototype.bind()
应用done
处理程序的第一个参数:
$.post("url", 'some data')
.done(function(ii, data) {
...
}.bind(null, ii)) // add this
这将有效地在其应用(绑定)到内部功能的时间创建的ii
当前值的快照。
你可以尝试总是而不是完成.. –