AJAX:发送一个循环XMLHTTP请求 [英] AJAX: sending xmlhttp requests in a loop

查看:109
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆