Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在简单的javascript中实现长拉/comet无需XSS框架_Javascript_Jquery_Comet_Long Polling - Fatal编程技术网

在简单的javascript中实现长拉/comet无需XSS框架

在简单的javascript中实现长拉/comet无需XSS框架,javascript,jquery,comet,long-polling,Javascript,Jquery,Comet,Long Polling,我有自己的精简脚本,目前根据浏览器支持使用XHR或脚本标记。这些请求最终返回一些JSON。我的问题是,现在这个对象的元素需要在客户端上由服务器更新,也就是说,我需要实现某种长拉/彗星解决方案 谷歌似乎利用各种框架(如JQuery等)推出了很多解决方案。。在客户端执行此操作。然而,这不是我的选择 我想知道你们对我如何扩展现有的方法以允许从服务器进行comet风格的更新有什么建议。标准方法之一似乎是使用隐藏的iframe。这是不可能的,因为为我提供json数据的应用程序服务器与实际的Web服务器不同

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

谷歌似乎利用各种框架(如JQuery等)推出了很多解决方案。。在客户端执行此操作。然而,这不是我的选择


我想知道你们对我如何扩展现有的方法以允许从服务器进行comet风格的更新有什么建议。标准方法之一似乎是使用隐藏的iframe。这是不可能的,因为为我提供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
}
客户端,只要在连接结束时重复查询即可。此时,还要处理输出

客户端示例:

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

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
}
客户端,只要在连接结束时重复查询即可。此时,还要处理输出

客户端示例:

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

Christian,你能详细说明一下我是如何在客户端实现你所说的吗?请看我修改后的代码。虽然在jQuery中,转换为纯javascript应该很容易。Christian,你能详细说明一下我如何在客户端实现你所说的内容吗?请参阅我修改的代码。尽管在jQuery中,转换为纯javascript应该很容易。