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
。我认为您需要提供有关新(?)问题的更多信息。