For循环在Javascript函数中无法正常工作
我正在使用Javascript发送Ajax请求到php页面。For循环在Javascript函数中无法正常工作
我的主要目标是向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中,Theses 2行仅显示第3次的值而不是第1次和第2次。 但我收到所有3次的回复。
此外,当我运行代码的JavaScript返回一个错误:
Uncaught Type Error: Cannot set Property 'value' of null
请帮我在哪里,我做错了
问题是$就默认为异步:真正的,所以循环中的值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`
}
Arvind,你是宝石..非常棒,谢谢你的帮助。这真的很棒。 – user2226181 2015-03-31 10:22:52
是的,我这样做,但它是说,我将不得不等待3分钟接受它,大声笑 – user2226181 2015-03-31 10:25:00
不,使用'async:false'是** ABSOLUTELY NOT **正确的答案。我有真正的工作要做,所以现在不能回答。 – Alnitak 2015-03-31 10:31:57
您的问题是回调里面的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
作为参数,在这在内回调指向它的值功能变得固定。
很常见的问题 - 只要我找到合适的重复问题就会关闭 – Alnitak 2015-03-31 10:13:59
你能帮我吗? – user2226181 2015-03-31 10:16:05
嗨Sachin, 我是新来的Javascript和Ajax你能告诉我我在哪里覆盖?我怎样才能将每一个响应都发送给HTML?我想在html中显示数值。我有多个输入类型相同的名称,但在HTML中有不同的ID,所以我需要一个循环 – user2226181 2015-03-31 10:20:27