Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 Angular$http—在接收响应数据时对其进行处理_Javascript_Angularjs_Json_Http - Fatal编程技术网

Javascript Angular$http—在接收响应数据时对其进行处理

Javascript Angular$http—在接收响应数据时对其进行处理,javascript,angularjs,json,http,Javascript,Angularjs,Json,Http,我正在构建一个与后端服务器通信的简单UI。 UI向服务器发送一个要处理的URL,服务器将返回一个结果列表 关于结果,每个结果都需要时间来计算,但我仍然希望在UI中显示传入的结果,甚至可能对结果集使用ng repeat,当从服务器接收到结果时,这些结果将被更新 问题是,Angular的$http服务返回的承诺只能处理成功和失败状态 我想知道是否存在某种“正在进行”的状态,我可以在其上运行回调函数 比如说,, 结果是JSON,包含一个结果数组: { results: [ {prop1:

我正在构建一个与后端服务器通信的简单UI。 UI向服务器发送一个要处理的URL,服务器将返回一个结果列表

关于结果,每个结果都需要时间来计算,但我仍然希望在UI中显示传入的结果,甚至可能对结果集使用
ng repeat
,当从服务器接收到结果时,这些结果将被更新

问题是,Angular的$http服务返回的承诺只能处理成功和失败状态

我想知道是否存在某种“正在进行”的状态,我可以在其上运行回调函数

比如说,, 结果是JSON,包含一个结果数组:

{
  results: [
    {prop1: val1, prop2: val2}, // result 1
    {prop1: val1, prop2: val2}, // result 2
    {prop1: val1, prop2: val2}, // result 3
    {prop1: val1, prop2: val2}  // result 4
  ]
}
想象一下,在响应中发送每个结果之前,计算需要5-6秒

因此,想要的流程和行为是:

用户界面:

  • 发送包含服务器要求的所有详细信息的
    POST
    请求
  • 在收到的每一行上,将该行中包含的结果推送到
    $scope.results
  • 其余部分将由摘要循环完成,
    ng repeat
    将确保我在屏幕上看到它们

    所以我唯一的问题是,在接收响应数据时,如何访问响应数据

    顺便说一句,如果你有任何建议,以另一种方式做,我很高兴听到,只要它是简单的。。。这真的是一个简单的用户界面,这里不需要任何高级的东西


    非常感谢。

    只有在后端支持的情况下,才能获得多部分结果。我所看到的json块上的唯一行为是,它一次提供全部内容,而不是一次获得一个片段。但是,如果您可以修改后端来实现这一点,那么您就可以完成各个部分。

    这是不可能的,因为HTTP请求的规范不提供此功能。 您必须发出多个请求(实现类似“分页”的功能)或尝试WebSocket(稍微复杂一点)


    但是没有你所描述的“流动”。客户机说“嘿,服务器,给我数据”-然后服务器计算所有需要的数据-然后服务器以原子方式响应整个数据-而不是一步一步。

    如果服务器逐行发送到outputStream,每一行都是其他工作人员接收到的结果,该怎么办?这样我可以一步一步地发送响应。。。当然,响应过程将花费更多的时间,因为发送的行带有间隙。当我们谈论HTTP请求时,没有输出流这样的东西。有请求主体,这些请求主体以原子方式传输。如果您使用的是HTTP以外的其他技术(因此不是$HTTP服务),这确实是可能的,但这将是一种完全不同的方法。没有$http,没有承诺——但可能是一个Websocket连接。这取决于你。事实上,我只是理解,当我用身体回应时,我必须告诉客户身体的长度是多少——如果计算还没有完成,这是未知的。无论如何,非常感谢。如果这是可能的,至少我知道这与我的实现无关。没问题,伙计。如前所述,您仍然可以尝试对大量数据执行一系列请求(给我第一个条目…给我第二个条目…等等,直到服务器说“没有下一个条目”),您也可以这样做“给我前5个条目。。。给我6到10条。。。等等-但是你必须在双方都详细地实现这一点,但是在客户端,我怎样才能在它们到达时阅读它们,并对它们进行处理(动态地)?@johni
    $q
    服务有第三个用于进度通知的参数,并将承诺描述为与对象交互的接口,该对象表示异步执行的操作的结果,并且可能在任何给定时间点完成,也可能不完成。