Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何让Ajax从以前的请求返回值?_Jquery_Ajax_Loops_For Loop_Append - Fatal编程技术网

Jquery 如何让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;

我试图在下面的每次迭代中将文本(先前创建的数组中的值)附加到DIV。Ajax调用似乎在等待返回其输出,直到所有迭代完成

在每次迭代过程中是否有附加的方法

谢谢

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开始迭代。这是否回答了您的问题?如果是的话,你能把它标记为答案吗?如果没有,我能帮你什么?