For循环在Javascript函数中工作不正常
我正在使用Javascript向php页面发送Ajax请求 我的主要目标是将ajax请求发送到PHP页面,并获得我已经完成的响应 问题是,当Ajax发回响应时,Javascript无法正确地将其发送到HTML 请看我的代码,以便您能清楚地理解For循环在Javascript函数中工作不正常,javascript,ajax,Javascript,Ajax,我正在使用Javascript向php页面发送Ajax请求 我的主要目标是将ajax请求发送到PHP页面,并获得我已经完成的响应 问题是,当Ajax发回响应时,Javascript无法正确地将其发送到HTML 请看我的代码,以便您能清楚地理解 Javascript code: function get_rental_fee(){ var count_model = $('#count_model').val(); for(var i =0; i < cou
Javascript code:
function get_rental_fee(){
var count_model = $('#count_model').val();
for(var i =0; i < count_model; i++){
var hours = $('#hours').val();
var modelid = $('#modelid_multi'+i).val();
var get_tax = $('#get_tax_multi'+i).val();
var get_counter = $('#get_counter_multi'+i).val();
var myData = "hours="+hours+"&modelid="+modelid+"&get_tax="+get_tax;
jQuery.ajax({
type: "POST", // Post / Get method
url: "get_rental_fee.php", //Where form data is sent on submission
dataType:"text", // Data type, HTML, json etc.
data:myData, //Form variables
success:function(response){
var result = response.split('|');
document.getElementById('rental_price_multi'+i).value=result[0];
document.getElementById('tax_multi'+i).value=result[1];
},
error:function (xhr, ajaxOptions, thrownError){
//On error, we alert user
alert(thrownError);
}
});
}
}
循环运行了3次,Php向我返回了3次响应。但在Javascript中,这两行只显示第3次的值,而不是第1次和第2次。
但我收到了所有3次的回复
此外,当我运行代码时,javascript返回一个错误:
Uncaught Type Error: Cannot set Property 'value' of null
请帮助我哪里做错了问题是$。ajax默认为async:true,因此循环中
I
的值在达到success
时不是所需的值。
您可以简单地使ajax同步:
$.ajax({
async: false,
...
})
编辑:
如果仍然希望它是异步的,则需要使用闭包
for(var i =0; i < count_model; i++){
(function(i){// closure `i`
$.ajax({
type: "POST",
...
});
})(i);//<-- for loop `i`
}
for(var i=0;i })(i) ;//您的问题是回调中的i
不再具有注册回调时的值。这是一个非常常见的问题
一种常见的解决方案是“关闭”变量i
,使其保持正确的值:
success: (function(i) {
return function(response) {
var result = response.split('|');
document.getElementById('rental_price_multi'+i).value=result[0];
document.getElementById('tax_multi'+i).value=result[1];
})(i)
外部函数作为一个参数传递给i
,在这一点上,它在内部回调函数中的值将被固定。非常常见的问题-当我找到一个合适的重复问题时就会关闭。你能帮助我吗?嘿,Sachin,我对Javascript和Ajax不熟悉。你能告诉我在哪里覆盖吗?我该怎么做将每个响应发送到HTML?我想在HTML中显示数值。我有多个输入类型,名称相同,但在HTML中ID不同,因此我需要一个LoopArvind,你太棒了。谢谢你的帮助。这真是太棒了。是的,我正在这样做,但它说我必须等待3分钟才能接受它,lolno,使用async:false
绝对不是正确答案。我有真正的工作要做,所以现在无法回答。爱你!!!xD,不知道循环的闭包,谢谢分享!!!
success: (function(i) {
return function(response) {
var result = response.split('|');
document.getElementById('rental_price_multi'+i).value=result[0];
document.getElementById('tax_multi'+i).value=result[1];
})(i)