For循环在Javascript函数中工作不正常

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向php页面发送Ajax请求

我的主要目标是将ajax请求发送到PHP页面,并获得我已经完成的响应

问题是,当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);

            }

            });

        }

    }
循环运行了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)