Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
带有ajax请求的jquery循环在包含警报的情况下可以完美地工作,而没有警报失败?_Jquery - Fatal编程技术网

带有ajax请求的jquery循环在包含警报的情况下可以完美地工作,而没有警报失败?

带有ajax请求的jquery循环在包含警报的情况下可以完美地工作,而没有警报失败?,jquery,Jquery,我有以下语法,它100%正确工作,并填充相应的复选框: for (var i = 1; i < 30; i++) { $.post('get_sku_prices', {data: $('#product'+i).val()},function(result) { $('#price'+i).val(result); $('#adjustedprice'+i).val(result); }); alert(i); } (变量i=1;i

我有以下语法,它100%正确工作,并填充相应的复选框:

for (var i = 1; i < 30; i++) {     
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});
alert(i);
}
(变量i=1;i<30;i++)的

$.post('get_sku_prices',{data:$('#product'+i).val()},函数(结果){
$(#price'+i).val(结果);
$('调整价格'+i).val(结果);
});
警报(一);
}
如前所述,工作正常。如果我删除警报并

for (var i = 1; i < 30; i++) {   
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});

}
(变量i=1;i<30;i++)的

$.post('get_sku_prices',{data:$('#product'+i).val()},函数(结果){
$(#price'+i).val(结果);
$('调整价格'+i).val(结果);
});
}
在没有警报的情况下不会填充字段,就像警报强制页面刷新一样


有什么想法吗?提前感谢…

这是因为在第一种情况下,
警报()
正在阻塞,需要解除警报才能继续循环

在第二种情况下(没有警报),ajax调用会立即执行,而不必等待响应。i、 e当第一个请求
(i=1)
的响应到达时,
i
不一定是
1

您可以使用
$.ajax
及其
上下文
选项来修复它

例如:

for (var i = 1; i < 30; i++) {     
    $.ajax({
        type: 'POST',
        url: 'get_sku_prices',
        data: {data: $('#product'+i).val()},
        context: {index: i}, // this value will be available in success as "this"
        success: function(result) {
            $('#price'+this.index).val(result); // use "this.index" here
            $('#adjustedprice'+this.index).val(result);
        }
    });
}
(变量i=1;i<30;i++)的

$.ajax({
键入:“POST”,
url:“获取商品价格”,
数据:{data:$('#product'+i).val()},
上下文:{index:i},//此值将作为“this”在success中可用
成功:功能(结果){
$('#price'+this.index).val(result);//在此处使用“this.index”
$(“#调整价格”+该指数).val(结果);
}
});
}

这是因为在第一种情况下,
警报()
正在阻塞,需要解除警报才能继续循环

在第二种情况下(没有警报),ajax调用会立即执行,而不必等待响应。i、 e当第一个请求
(i=1)
的响应到达时,
i
不一定是
1

您可以使用
$.ajax
及其
上下文
选项来修复它

例如:

for (var i = 1; i < 30; i++) {     
    $.ajax({
        type: 'POST',
        url: 'get_sku_prices',
        data: {data: $('#product'+i).val()},
        context: {index: i}, // this value will be available in success as "this"
        success: function(result) {
            $('#price'+this.index).val(result); // use "this.index" here
            $('#adjustedprice'+this.index).val(result);
        }
    });
}
(变量i=1;i<30;i++)的

$.ajax({
键入:“POST”,
url:“获取商品价格”,
数据:{data:$('#product'+i).val()},
上下文:{index:i},//此值将作为“this”在success中可用
成功:功能(结果){
$('#price'+this.index).val(result);//在此处使用“this.index”
$(“#调整价格”+该指数).val(结果);
}
});
}

将计数发送到服务器,然后尝试获取结果的计数,并根据从结果接收的计数而不是从for循环接收的计数进行更改。

将计数发送到服务器,然后尝试获取结果的计数,并根据从结果而不是从计数接收的计数进行更改从for循环。

尝试在函数执行中添加一些延迟

var i=0;
function postRequest(i){
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});
setTimeout(function(){
    postRequest(i++);
},1000);
}

尝试在函数执行中添加一些延迟

var i=0;
function postRequest(i){
$.post('get_sku_prices', {data: $('#product'+i).val()},function(result) {
    $('#price'+i).val(result);
    $('#adjustedprice'+i).val(result);
});
setTimeout(function(){
    postRequest(i++);
},1000);
}

您可以创建自己的作用域函数,类似于:

for (var i = 1; i < 30; i++) {
    (function (index) {
        $.post('get_sku_prices', {
            data: $('#product' + index).val()
        }, function (result) {
            $('#price' + index).val(result);
            $('#adjustedprice' + index).val(result);
        });
    })(i)
}
for(变量i=1;i<30;i++){
(功能(索引){
$.post('获取库存单位价格'{
数据:$(“#产品”+索引).val()
},函数(结果){
$('价格'+指数).val(结果);
$('调整价格'+指数).val(结果);
});
})(一)
}

您可以创建自己的作用域函数,类似于:

for (var i = 1; i < 30; i++) {
    (function (index) {
        $.post('get_sku_prices', {
            data: $('#product' + index).val()
        }, function (result) {
            $('#price' + index).val(result);
            $('#adjustedprice' + index).val(result);
        });
    })(i)
}
for(变量i=1;i<30;i++){
(功能(索引){
$.post('获取库存单位价格'{
数据:$(“#产品”+索引).val()
},函数(结果){
$('价格'+指数).val(结果);
$('调整价格'+指数).val(结果);
});
})(一)
}

Ajax是异步的。字段正在更新,只是等待请求完成的时间不够长。在使用i var的for循环中还存在一个典型的范围问题。谢谢Kevin,有什么关于如何解决这个问题的建议吗?我建议看一些ajax教程。您缺少ajax工作原理的一个基本部分。主要是“A代表异步”部分。发送30个这样的请求似乎有点错误。。。您不能改进后端以返回30个结果吗?Ajax是异步的。字段正在更新,只是等待请求完成的时间不够长。在使用i var的for循环中还存在一个典型的范围问题。谢谢Kevin,有什么关于如何解决这个问题的建议吗?我建议看一些ajax教程。您缺少ajax工作原理的一个基本部分。主要是“A代表异步”部分。发送30个这样的请求似乎有点错误。。。你不能改进你的后端以返回30个结果吗?谢谢techfoobar。这不管用。我看不到任何服务器响应或帖子?谢谢你的时间和知识!谢谢你。这不管用。我看不到任何服务器响应或帖子?谢谢你的时间和知识!冠军。谢谢,工作100%正确!你所说的作用域函数是什么意思?函数index()做什么?再次感谢。如果有机会对此发表评论来帮助我,很抱歉,我知道我太厚颜无耻了,只需要确保我理解:-)再次感谢…@Smudger您必须理解javascript中的作用域/闭包是如何工作的。例如,在我的答案代码中,index是一个参数,它引用来自for循环的i变量。由于ajax请求在默认情况下是异步的,使用闭包函数,您可以确保您的“索引”在实例化时对应于正确的“i”值。否则,在不使用闭包(作用域)函数的情况下,“index”将在代码调用时获得值,在这里,所有ajax请求的值肯定为30。谢谢,工作100%正确!你所说的作用域函数是什么意思?函数index()做什么?再次感谢。如果有机会发表评论来帮助我,对不起,我知道我是厚颜无耻的,只是没有