Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.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 处理连续的JSON流_Javascript_Jquery_Json_Stream - Fatal编程技术网

Javascript 处理连续的JSON流

Javascript 处理连续的JSON流,javascript,jquery,json,stream,Javascript,Jquery,Json,Stream,用于返回连续且无止境的JSON数据流的页面(现已失效) 我希望在我自己的网页中使用jQuery(或JavaScript,但最好是jQuery)来处理它,以便能够基于推特的实时提要显示视觉效果 因为据我所知,jQueryparseJSON函数只会在服务器发送所有数据后执行回调函数,但实际上这是一个连续的数据流。我如何“按发生的情况”处理数据,但仍然保持连接运行?一个非常基本的网页无法保持与服务器的实时/运行连接。Web浏览器向服务器发送请求。服务器将响应(HTML等)发送回客户端(web浏览器)。

用于返回连续且无止境的JSON数据流的页面(现已失效)

我希望在我自己的网页中使用jQuery(或JavaScript,但最好是jQuery)来处理它,以便能够基于推特的实时提要显示视觉效果


因为据我所知,jQuery
parseJSON
函数只会在服务器发送所有数据后执行回调函数,但实际上这是一个连续的数据流。我如何“按发生的情况”处理数据,但仍然保持连接运行?

一个非常基本的网页无法保持与服务器的实时/运行连接。Web浏览器向服务器发送请求。服务器将响应(HTML等)发送回客户端(web浏览器)。将其视为一个无状态模型——在请求和响应完成后,任何连接都不会保持活动状态

因此,你必须自己做。您必须从客户端调用其他定期请求

一种方法是通过函数定期调用AJAX/GET功能。例如:

setInterval(function() {

    $.ajax({
      url: "mydata/get",
      success: function(){
        // update content.
      }
    });

}, 5000);

这将每隔5秒向mydata/get(或任何您想要使用的URL)发出AJAX请求

您在问题中指定的url发送JSON响应流。由于浏览器中的跨域安全限制,您无法使用javascript访问它。您需要在服务器上实现一个桥接服务器端脚本,您可以使用AJAX请求定期轮询该脚本,或者将您的站点托管在
twitter.com
。第一种似乎更可行。

这类事情最好现在就用,根据CanIUse.Com的说法,除了Opera Mini(有关旧浏览器或所有浏览器的更多详细信息,请参阅该链接,并单击“资源”选项卡查看更多链接)。综上所述,IE 10+、Firefox 11+(如果在WebWorker上下文中为38+)、Chrome 16+、Opera 12.1+、Safari 7+、Android 4.4+、Opera Mobile 12.1+都支持WebSocket

注意:您可能还想了解,尽管它们有不同的用例和不同的功能

看起来是这样的:

var connection = new WebSocket(
   'ws://html5rocks.websocket.org/echo',
   ['soap', 'xmpp']
);
将一些事件处理程序立即附加到连接可以让您知道连接何时打开、何时收到传入消息或是否发生错误

发送消息变得如此简单:

connection.send('your message');
connection.send(binaryData);
有关如何执行此操作的完整说明,请参阅

ASP.NET开发人员:如果出于某种原因,你需要支持旧的浏览器,并且不想弄清楚如何处理那些不支持WebSosits的用户,请考虑使用诸如./P>之类的库。 旧浏览器的旧EventSource API答案

现在大多数浏览器都实现了,这使得长时间轮询非常容易,只要流可以以内容类型
文本/事件流
交付即可。较旧的浏览器或那些出于任何原因无法设计流以获得该内容类型的开发人员可以使用一些浏览器来做同样的事情

下面是一个例子:

var jsonStream = new EventSource('https://example.com/yourstreamingservice')
jsonStream.onmessage = function (e) {
   var message = JSON.parse(e.data);
   // handle message
};
这基本上是我在下面概述的完整版本

针对非常旧的浏览器的更旧的服务流解决方案

您需要的是长轮询。您需要一个定制的AJAX
onreadystatechange
处理函数。您需要定期检查内容,而不是等待整个流完成(因为它永远不会完成)。请注意,您需要使用
iframe
,在IE 9及更低版本中进行一些繁重的工作

大致:

  • 对每个
    onreadystatechange
    事件做出响应,并检查您被提供给当前角色的流,以查看是否有足够的数据来使用一个或多个离散事件。您需要自己使用javascript字符串处理函数来解析流。可以使用split、indexOf、正则表达式、循环等组合来完成此任务
  • 如果还没有足够的内容,请退出并等待下一个事件
  • 我非常确定每次启动
    onreadystatechange
    处理程序时,
    responseText
    都将是迄今为止接收到的所有数据。定义一个持久变量,该变量将保存尚未正确处理的第一个字符的位置
  • 一旦有足够的内容让一个或多个离散事件出现在流中,一次取出一个,并将它们传递给JSON解析器,以实际将文本呈现为对象。正常使用它们
查看此资源,或访问SoftwareAs。如果必须支持IE9或更高版本,则需要使用
iframe
方法

这是一本书:

总之,服务流使HTTP流方法更加灵活,因为您可以流式传输任意内容而不是Javascript命令,并且您可以控制连接的生命周期。然而,它结合了两种不同浏览器之间不一致的技术,存在可预测的可移植性问题。实验表明,页面流技术在IE[9及更高版本]和Firefox上都可以使用,但无论使用XMLHTTPRequest还是IFrame,服务流都只能在Firefox上使用。在第一种情况下,IE[9及以上版本]会抑制响应直到其完成,如果使用了解决方法,则IFrame会起作用:IE[9及以上版本]在前256个字节之后接受来自服务器的消息,因此唯一要做的是在发送消息之前发送256个虚拟字节。在此之后,所有消息将按预期到达。因此,在IE[9及以上版本]中也可以实现全服务流媒体

请注意,它是从2006年开始的,所以它肯定已经过时了,但是如果你必须支持旧的浏览器,它仍然是相关的

安全问题

普通AJAX不能跨域,这意味着(n