For循环在Javascript函数中无法正常工作
For loop is not working properly in Javascript function
我正在使用Javascript向php页面发送Ajax请求。
我的主要目标是向PHP页面发送ajax请求,并获得我已经完成的响应。
问题是,当Ajax发回响应时,Javascript无法将其正确发送到HTML。
看看我的代码,这样你就能清楚地理解。
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);
}
});
}
}
问题就在这里:
document.getElementById('rental_price_multi'+i).value=result[0];
document.getElementById('tax_multi'+i).value=result[1];
循环运行了3次,Php向我发回了3次响应。但在Javascript中,这两行只显示了第三次的值,而不是第一次和第二次。但我收到了所有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`
}
您的问题是回调中的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
,此时其在内部回调函数中的值变为固定值。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- javascript扫雷器floodfill算法不能正常工作