Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么XMLHTTPRequest在循环ajax的最后一次迭代中运行_Javascript_Php_Ajax - Fatal编程技术网

Javascript 为什么XMLHTTPRequest在循环ajax的最后一次迭代中运行

Javascript 为什么XMLHTTPRequest在循环ajax的最后一次迭代中运行,javascript,php,ajax,Javascript,Php,Ajax,我有这段代码,它应该在循环的每个迭代中发送请求,但它在最后一个迭代中运行,为什么 function findTotal(){ var arr = document.getElementsByName('price'); var PID = document.getElementsByName('product'); var tot = 0; var xml ; for ( j=0; j<PID.length;

我有这段代码,它应该在循环的每个迭代中发送请求,但它在最后一个迭代中运行,为什么

function findTotal(){
        var arr = document.getElementsByName('price');
        var PID = document.getElementsByName('product');
        var tot = 0;
        var xml ;

        for ( j=0; j<PID.length; j++){

            xml = new XMLHttpRequest();
            xml.onreadystatechange=function()
                {   
                    if (xml.readyState==4 && xml.status==200){
                        for( i=0;i<arr.length;i++){
                            if(parseInt(arr[i].value)){
                                tot += xml.responseText * arr[i].value;
                                document.getElementById('total').value = tot;
                            }
                        }
                    }
                }

                xml.open("POST","http://localhost/CRM/mr/getPrice/"+PID[j].value);
                xml.send();
        }   
    }
函数findTotal(){
var arr=document.getElementsByName(“价格”);
var PID=document.getElementsByName(“产品”);
var-tot=0;
var-xml;

对于(j=0;j您正在反复为一个
xml
对象设置
onstatechange
,您希望为每个迭代创建一个新的
xml
对象。移动
xml=new XMLHttpRequest()
循环中的
语句。

您应该为每个请求使用新的XMLHttpRequest对象,因为前一个请求很可能尚未完成

开()

注意:为已激活的请求(已调用open()或openRequest()的请求)调用此方法等同于调用abort()


您可以在循环内部执行
console.log(PID[j].value)
吗您正在获得您期望的所有值?告诉我:event.returnValue已弃用。请使用标准event.preventDefault()相反,如果你看到的就是这些,那么要么循环根本没有运行,要么你的console.log在循环之外,要么你还没有运行
findTotal
我在输入中使用onblur运行finalTotal,但我看到了循环的数字系列,但我没想到会尝试删除第一个
console.log
并在
下添加一个新的循环t+=xml.responseText*arr[i].value;
表示
console.log(tot)
以查看您是否按照预期每次都获得
responseText
。我认为您需要提供有关新(?)问题的更多信息。