Ajax轮询请求

Posted -wenli

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax轮询请求相关的知识,希望对你有一定的参考价值。

Ajax轮询请求

 

什么是轮询?

  轮询(polling):客户端按规定时间定时向服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接。

  Ajax轮询需要服务器有很快的处理速度与快速响应。

 

 

Ajax轮询实现

 

Ajax轮询原理

客户端是按照规定时间(这个时间由你设定,此处默认为1秒)像服务端发送请求,前一次请求完成后,无论有无结果返回,一秒之后下一次请求又会发出。这就叫做Ajax轮询。

 

<script>
$(function()
    var code,status;
    function getResult()
        var params = 
            code: code,
            operate: ‘什么操作TODO:‘,
        ;
        $.ajax(
            type: ‘POST‘,
            url: "请求地址TODO:",
            data: params, 
            success: function(response) 
                console.log(‘成功啦‘);
                //对成功数据的操作TODO:
                clearInterval(status);               
            ,
            dataType: ‘json‘,
            timeout: 30*1000,// 超时时间
            // 超时意味着出错了
            error: function (error) 
              console.log(‘失败啦‘);
            

        );
   

  );
//获取code。如果code存在则调用轮询来获取数据
    if(code)
           status = setInterval(getResult, 1000);
      
   
  </script>

setInterval()用法:

 function direct() 
        console.info( "time: ", ( new Date() ).getTime() );
    
    function showlog() 
        setInterval(direct(), 1000);
    
    function showlog_2() 
        setInterval( direct, 1000 );
    
    function showlog_3() 
        setInterval( function () 
            direct();
        , 1000 );
    
    function showlog_4() 
        setInterval( "direct()", 1000 );
    
    // showlog(); //=> 执行一次
    // showlog_2(); //=> 每隔 1000毫秒 执行一次
    // showlog_3(); //=> 每隔 1000毫秒 执行一次
    // showlog_4(); //=> 每隔 1000毫秒 执行一次

 

长轮询

  ajax实现:在发送ajax后,服务器端会阻塞请求直到有数据传递或超时才返回。 客户端javascript响应处理函数会在处理完服务器返回的信息后,再次发出请求,客户端再次建立连接,周而复始

<script>
$(function() 
    //定义code
    var code;
    //获取code  TODO:
    getStatusLong();
    //  长轮询执行
    function getStatusLong()
    
        var data = 
            operate: ‘操作TODO:‘,
            code: code,
        ;
        $.ajax(
            type: ‘post‘,
            url: url, 
            data: data, 
            success: function(response) 
                if (response.error == 0) 
                //成功的操作
                
            ,
            dataType: ‘json‘,
            timeout: 10*1000,// 超时时间
            // 超时意味着出错了
            error: function (error) 
                console.log(error);// timeout
                // 立即发出请求
                getOrderStatusLong();
            

        );

    
);
</script>

 

以上是关于Ajax轮询请求的主要内容,如果未能解决你的问题,请参考以下文章

长轮询冻结浏览器并阻止其他 ajax 请求

Ajax轮询请求

Ajax轮询——“定时的通过Ajax查询服务端”

如何在页面离开时终止长轮询 Ajax 请求

ajax轮询请求实现源码分享

ajax轮询