AJAX:发送一个循环XMLHTTP请求 [英] AJAX: sending xmlhttp requests in a loop
本文介绍了AJAX:发送一个循环XMLHTTP请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样的功能,下面我呼吁在一个循环中,我得到了警报n次,但只有n-1或有时该功能N-2响应
如果(window.XMLHtt prequest)
{// $ C $下IE7 +,火狐,Chrome,歌剧,Safari浏览器
XMLHTTP =新XMLHtt prequest();
}
其他
{// code对IE6,IE5
XMLHTTP =新的ActiveXObject(Microsoft.XMLHTTP);
}
xmlhttp.onreadystatechange =功能()
{
如果(xmlhttp.readyState == 4和&安培; xmlhttp.status == 200)
{
警报(xmlhttp.responseText);
//document.getElementById("warnings_panel").innerHTML+=xmlhttp.responseText;
}
}
警报(在阿贾克斯)
xmlhttp.open(GET,getresponse.php开始=?+启动+&放大器;末=+端,真正的);
xmlhttp.send();
解决方案
我已经调用的循环功能做了一个类(你可以很容易地修改),并且正确地调用功能。也许这可以适用于您的需要。
(另外,如果有人看到的东西错了,它是很好的从别人听)
TEST.HTM
< HTML>
< HEAD>
<脚本类型=文/ JavaScript的>
功能myXmlHttp(){
/ *构造仿真* /
this.setPersitent =
功能(文件,onReadyFunc,参数,可以循环)
{
myXmlHttpObj.loop =环路;
myXmlHttpObj.file =文件;
myXmlHttpObj.onReadyFunc ='myXmlHttpObj。+ onReadyFunc;
myXmlHttpObj.params = PARAMS;
myXmlHttpObj.mySetRequest();
}
this.setParams =
功能(PARAMS)
{
myXmlHttpObj.params = PARAMS;
}
<! - 标准的初始code - >
this.mySetRequest =
功能 ()
{
请求= FALSE;
尝试{要求=新XMLHtt prequest(); }
赶上(trymicrosoft){
尝试{要求=新的ActiveXObject(MSXML2.XMLHTTP); }
赶上(othermicrosoft){
尝试{要求=新的ActiveXObject(Microsoft.XMLHTTP);}
捕捞(失败){请求= FALSE;} / * catch3 * /} / * catch2 * /} / * catch1 * /
如果(!要求)
警报(错误初始化XMLHtt prequest!);
} / * FUNC * /
this.mySendReq =
功能()
{
VAR URL = myXmlHttpObj.file;
request.open(POST,网址,真实);
//一些HTTP标头必须设置与任何POST请求。
request.setRequestHeader
(内容型,应用程序/ x-WWW的形式urlen codeD;字符集= UTF-8);
request.setRequestHeader(内容长度,myXmlHttpObj.params.length);
request.setRequestHeader(连接,关闭);
request.onreadystatechange =的eval(myXmlHttpObj.onReadyFunc);
request.send(myXmlHttpObj.params);
}
this.listenPHP =
功能 ( ) {
如果(request.readyState == 4){
如果(request.status == 200)
{
警报(request.responseText);
myXmlHttpObj.loop--;
如果(myXmlHttpObj.loop大于0)
{
myXmlHttpObj.setParams(js_rand =+的Math.random()+);
myXmlHttpObj.mySendReq();
}
} //内,如果
其他{警报(状态为+ request.status);}
} //外IFF
}//功能
}//结束
myXmlHttpObj =新myXmlHttp();
myXmlHttpObj.setPersitent
('getresponse.php','listenPHP',js_rand =+的Math.random()+,3);
myXmlHttpObj.mySendReq();
< / SCRIPT>
< /头>
<身体GT;
< /身体GT;
< / HTML>
和 getresponse.php
< PHP
回声我recived这种随机从JS:',$ _ POST ['js_rand']'
这兰特从PHP:'兰特(1,9999);
?>
I have this function below and I call that function in a loop I get the alert n times but only n-1 or sometimes n-2 responses
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
alert(xmlhttp.responseText);
//document.getElementById("warnings_panel").innerHTML+=xmlhttp.responseText;
}
}
alert("in ajax)
xmlhttp.open("GET","getresponse.php?start="+ start + "&end=" + end,true);
xmlhttp.send();
解决方案
I have made a class (that you can modify easily) for calling a function in loop and it calls the functions correctly. Maybe this could apply to your need.
(Also if anyone sees something wrong it's good to hear from others)
test.htm
<html>
<head>
<script type="text/javascript">
function myXmlHttp() {
/*constructor simulator*/
this.setPersitent=
function (file, onReadyFunc,params,loop)
{
myXmlHttpObj.loop = loop;
myXmlHttpObj.file=file;
myXmlHttpObj.onReadyFunc='myXmlHttpObj.'+onReadyFunc;
myXmlHttpObj.params=params;
myXmlHttpObj.mySetRequest();
}
this.setParams=
function ( params )
{
myXmlHttpObj.params=params;
}
<!--Standard initial code-->
this.mySetRequest =
function ()
{
request = false;
try { request = new XMLHttpRequest(); }
catch (trymicrosoft) {
try { request = new ActiveXObject("Msxml2.XMLHTTP"); }
catch (othermicrosoft) {
try {request = new ActiveXObject("Microsoft.XMLHTTP");}
catch (failed) {request = false;}/*catch3*/}/*catch2*/}/*catch1*/
if (!request)
alert("Error initializing XMLHttpRequest!");
} /*func*/
this.mySendReq=
function()
{
var url = myXmlHttpObj.file;
request.open("POST", url, true);
//Some http headers must be set along with any POST request.
request.setRequestHeader
("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
request.setRequestHeader("Content-length", myXmlHttpObj.params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = eval(myXmlHttpObj.onReadyFunc);
request.send(myXmlHttpObj.params);
}
this.listenPHP =
function ( ) {
if ( request.readyState == 4) {
if ( request.status == 200)
{
alert(request.responseText);
myXmlHttpObj.loop--;
if(myXmlHttpObj.loop>0)
{
myXmlHttpObj.setParams("js_rand="+Math.random()+"");
myXmlHttpObj.mySendReq();
}
}//inner if
else{alert("status is " + request.status);}
}//outer iff
}//function
}//END
myXmlHttpObj = new myXmlHttp();
myXmlHttpObj.setPersitent
('getresponse.php', 'listenPHP',"js_rand="+Math.random()+"",3) ;
myXmlHttpObj.mySendReq();
</script>
</head>
<body >
</body>
</html>
and getresponse.php
<?PHP
echo 'I recived this random from js:',$_POST['js_rand'],'
this rand is from php:',rand(1,9999);
?>
这篇关于AJAX:发送一个循环XMLHTTP请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文