在简单的javascript中实现长pull / comet,没有框架需要XSS

implementing long pull / comet in simple javascript no frameworks require XSS

本文关键字:框架 XSS comet javascript 简单 实现 pull      更新时间:2023-09-26

我有自己的精简脚本,目前根据浏览器的支持使用XHR或脚本标签。这些请求最终返回一些JSON。我的问题是现在这个对象的元素现在需要由服务器更新,而在客户端,即我需要实现一些长拉/彗星soln。

Google似乎使用各种框架(如JQuery等)提出了许多解决方案。要在客户端执行此操作。然而,这不是我的选择。

我想知道你们是否有任何建议,我如何扩展我现有的方法,以允许从服务器进行comet风格的更新。标准方法之一似乎是使用隐藏框架。这是一个不去为我提供json数据的应用服务器是不同于实际的web服务器。

jQuery简单地封装了XHR/XMLHTTPRequest对象。首先,您需要一个小函数以跨浏览器的方式返回对象。这是在3行或更少,不是太难。也就是说,它们是修复不同浏览器问题的好代码片段,比如内存泄漏。我强烈建议你用这个。这些当然超过3行(除非缩小)。但是在任何一种情况下,如果你想要重复连接,你就不能从头开始做。

接下来,在服务器端,假设您使用PHP:

set_time_limit(300); // force connection only after 5 minutes
ignore_user_abort(false); // if the connection ends, terminate immediately
while(true){
    if(some_condition()){
        echo some_response();
        break; // break the loop
    }
    sleep(2); // wait for a second or two
}

客户端,只要在连接结束时重复查询即可。此时,还要处理输出。

Clients-side例子:

function poll(){
    jQuery.get('http://somesite.com/poll.php',function(data){
        alert('Just received: '+data);
        poll(); // repeat poll
    });
}
poll(); // begin polling