手机版

详细解释在JavaScript中发送AJAX请求进行循环的问题

时间:2021-11-05 来源:互联网 编辑:宝哥软件园 浏览:

首先,很少看到这个问题,因为有太多更好的解决方案。今天在做ajax的时候,每次迭代发送一个get请求是很有意思的,因为迭代速度太快了,下一次迭代是在一个请求完成之前进行的。在chrome和ff上,除了最后一个请求,所有请求都被取消。那我们该怎么办?设置延迟(不是很好)还是别的?方法有很多,比如设置休眠、迭代等。我采用了另外两种解决方案。1.同步ajax请求,但默认情况下ajax请求是异步的,因此应该将其设置为false。

函数creatXMLHttpRequest(){ var xmlHttp;if(窗口。ActiveX object){ return xmlHttp=new ActiveX object(' Microsoft。XMLHTTP’);} else if(窗口。XMLHttpRequest){ return xmlHttp=new XMLHttpRequest();} }函数disButton(name,actionName,resquestParmName){ var path=document . getelementbyid(' path ')。价值;var xmlHttp=creatXMLHttpRequest();var invoiceIds=new Array();invoiceIds=document . getelementsbyname(名称);//迭代速度比发送请求和接收回复的时间要快,所以在get请求完成之前,已经进行了(i=0)的下一个请求;i invoiceIds.lengthI){ var invoice id=invoice id[I]。价值;var url=路径'/' actionName '。“行动?”resquestParmName '=' invoiceIdxmlhttp . onreadystatechange=function(){ if(xmlhttp . readystate==4){ if(xmlhttp . status==200){ var result=xmlhttp . responsetext;if(结果==' 0 '){ document . getelementbyid(' BTN ' invoiceId)。disabled=' disabled} } } } xmlHttp.open('GET ',url,false);xmlhttp . send(null);}}这样,在同步ajax请求的情况下,代码会在服务器响应后执行,然后迭代继续。但似乎不建议这样。

第二,采用异步模式,但是要记住每次迭代都要创建一个新的XMLHttpRequest对象,不能重复使用。

函数creatXMLHttpRequest(){ var xmlHttp;if(窗口。ActiveX object){ return xmlHttp=new ActiveX object(' Microsoft。XMLHTTP’);} else if(窗口。XMLHttpRequest){ return xmlHttp=new XMLHttpRequest();} }函数disButton(name,actionName,resquestParmName){ var xmlHttp;var path=document . getelementbyid(' path ')。价值;var invoiceIds=new Array();invoiceIds=document . getelementsbyname(名称);//迭代速度比发送请求和接收回复的时间要快,所以在get请求完成之前,已经进行了(i=0)的下一个请求;i invoiceIds.lengthI){ xmlHttp=creatXMLHttpRequest();var invoice id=invoice id[I]。价值;var url=路径'/' actionName '。“行动?”resquestParmName '=' invoiceIdfu(xmlHttp,url,invoiceId);} }function fu(xmlHttp,url,invoiceId){ xmlHttp . onreadystatechange=function(){ if(xmlHttp . readystate==4){ if(xmlHttp . status==200){ var result=xmlHttp . responsetext;if(结果==' 0 '){ document . getelementbyid(' BTN ' invoiceId)。disabled=' disabled} } } } //xmlHttp.open('GET ',url,true);xmlhttp . send(null);}因为JS的for循环与ajax异步运行,所以它会导致for循环结束,但ajax尚未执行。如果采用异步请求,如果每次迭代都向new发送一个XMLHttpRequest,那么每个请求都可以完成,但是结果仍然不准确,有些程序还没有执行。我明白了,原来在每次迭代中都要执行几行代码,所以发送ajax异步请求的代码应该放在一个函数中,这个函数应该在每次迭代中被调用,就这样。在性能方面,对于这个迭代ajax请求,同步方法似乎具有更高的性能。

这个问题得到了解决,对ajax和http的理解也加深了。以上介绍了用Javascript for loop发送AJAX请求的问题,希望对Javascript教程感兴趣的朋友有所帮助。

版权声明:详细解释在JavaScript中发送AJAX请求进行循环的问题是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。