带有ajax请求的jquery循环在包含警报的情况下可以完美地工作,而没有警报失败?
我有以下语法,它100%正确工作,并填充相应的复选框:带有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
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()做什么?再次感谢。如果有机会发表评论来帮助我,对不起,我知道我是厚颜无耻的,只是没有