Jquery 如何让Ajax从以前的请求返回值?
我试图在下面的每次迭代中将文本(先前创建的数组中的值)附加到DIV。Ajax调用似乎在等待返回其输出,直到所有迭代完成 在每次迭代过程中是否有附加的方法 谢谢Jquery 如何让Ajax从以前的请求返回值?,jquery,ajax,loops,for-loop,append,Jquery,Ajax,Loops,For Loop,Append,我试图在下面的每次迭代中将文本(先前创建的数组中的值)附加到DIV。Ajax调用似乎在等待返回其输出,直到所有迭代完成 在每次迭代过程中是否有附加的方法 谢谢 var inputValue = []; $("form#null_form :input[type=text]").each(function () { inputValue.push($(this).prop('value')); }); for (var i = 1; i < inputValue.length;
var inputValue = [];
$("form#null_form :input[type=text]").each(function () {
inputValue.push($(this).prop('value'));
});
for (var i = 1; i < inputValue.length; i++) {
$.ajax({
url: "http://urlthatdoessomething.xxx",
type: 'POST',
dataType: 'json',
success: function (output_string) {
$('#results').append('<p class=\"normal-msg\">' + inputValue[i] + ' column successfully converted...</p> ');
},
error: function (output_string) {
$('#results').append('<p class=\"error-msg\">ERROR: Check spelling and try again... </p> ');
}
});
}
var inputValue=[];
$(“form#null _form:input[type=text]”)。每个(函数(){
push($(this.prop('value'));
});
对于(变量i=1;i”+inputValue[i]+'列已成功转换…”);
},
错误:函数(输出字符串){
$('results')。追加('p class=\'error msg\“>错误:检查拼写并重试…);
}
});
}
根据定义,AJAX是异步的。这意味着您的代码不会等待http://urlthatdoessomething.xxx
在for循环中继续之前。实际上,for循环会快速生成所有AJAX请求,当响应到达时,会追加文本。迭代已经发生了,事实上时间非常接近,以至于所有的响应似乎都在同一时间返回,所有的文本似乎都在同一时间追加
这个问题的解决方案是在AJAX函数的回调中调用下一个请求,而不是使用for循环。这样,下一个请求将在前一个请求完成之前不会执行,这给了您在迭代之间预期的时间
var requestsCount = 1;
function makeRequest(i) {
$.ajax({
url: "http://urlthatdoessomething.xxx",
type: 'POST',
dataType: 'json',
success: function (output_string) {
$('#results').append('<p class=\"normal-msg\">' + inputValue[i] +
' column successfully converted...</p> ');
if (requestsCount < inputValue.length) {
makeRequest(requestsCount + 1);
requestsCount ++;
}
},
error: function (output_string) {
$('#results').append('<p class=\"error-msg\">
ERROR: Check spelling and try again... </p> ');
}
});
}
makeRequest(inputValue[1]);
var requestscont=1;
函数makeRequest(i){
$.ajax({
url:“http://urlthatdoessomething.xxx",
键入:“POST”,
数据类型:“json”,
成功:函数(输出字符串){
$(“#results”).append(“”+inputValue[i]+
“已成功转换列…
”);
if(requestScont
错误:请检查拼写并重试…);
}
});
}
makeRequest(inputValue[1]);
旁注:以上是代码的翻译。您可能打算在for循环中写入var i=0
,因为数组是零索引的。如果是这种情况,则更改var requestscont=1代码>至var requestscont=0代码>和makeRequest(inputValue[1])代码>到makeRequest(inputValue[0])代码> 用于
的中的AJAX可能是危险的。如果服务器关闭,您将向死胡同发送大量请求!此外,还不能保证您将按照ajax调用的顺序追加它们。奇怪的是,您没有向服务器发送任何内容,也没有返回您实际使用的任何内容,并且您为匹配表单中的每个输入发送ajax请求?ajax请求到底在做什么,您希望它输出什么。作为旁注,您需要一个闭包来保持异步中i
的值不变callback@tymeJV-此例程位于站点的后端,很少使用。Ajax调用需要处理的项的数量各不相同,这就是为什么我现在将它放在一个循环中。有没有更好的方法来实现这一点?接受建议。谢谢。@adeneo-该例程确实会在外部数据库中进行更改。我只是没有在示例中包含细节。@dsiler12221-谢谢。是的,因为我忽略了表单中的第一个输入字段,所以我从1开始迭代。这是否回答了您的问题?如果是的话,你能把它标记为答案吗?如果没有,我能帮你什么?