【问题标题】:Php ajax response in parts when available部分可用的 PHP ajax 响应
【发布时间】:2016-07-22 03:39:42
【问题描述】:

我有一个好奇心问题,似乎没有找到正确的短语来表达我的意思,对于一个成功的 Google 搜索查询。

一些网站(主要进行价格查询)使用用户设置的条件对某些内容(假设它是 php 脚本)进行 ajax 查询,并且在查询完成后数据不会一次全部显示,但您会看到一些从响应中显示的部分较早(因为我假设它们较早可用)和稍后显示。

我想 ajax 请求是对一个 php 脚本完成的,该脚本依次查询不同的源并尽快返回数据,这意味着首先发送更快的查询响应。

核心问题:

如何构建这样的机制以使 php 脚本可以返回数据 多次和ajax脚本不只是等待A响应?

我很确定有这方面的信息可用,但不幸的是,即使通过什么字词搜索它也无法找到。

编辑:

我认为一个很好的例子是廉价机票预订服务,它查询不同的来源并似乎在数据可用时立即输出数据,这意味着来自不同航空公司的不同优惠出现在不同的时间。

希望有人能解除我的好奇心。

最好的,

阿拉里

【问题讨论】:

  • 所以在这些网站上打开开发者控制台,看看发生了什么。
  • 我试过了,整个脚本都被缩小了,我无法确定发生了什么,甚至无法确定调用的发起位置。

标签: php ajax httprequest


【解决方案1】:

在客户端,您需要onprogress。看下面的例子(复制自this answer):

var xhr = new XMLHttpRequest()
xhr.open("GET", "/test/chunked", true)
xhr.onprogress = function () {
  console.log("PROGRESS:", xhr.responseText)
}
xhr.send()

xhr.responseText 将不断累积服务器给出的响应。这里的缺点是xhr.responseText 包含累积的响应。您可以在其上使用substring 以仅获取当前响应。

在服务器端,你可以做输出缓冲来分块响应,例如喜欢:

<?php
header( 'Content-type: text/html; charset=utf-8' );
for($i = 0; $i < 100; $i++){
    echo "Current Response is {$i} \r\n";
    flush();
    ob_flush();
    // sleep for 2 seconds
    sleep(2);
}

【讨论】:

  • 感谢您的回答,是否有此类功能的名称或术语,以便我进一步研究?
  • 是的,搜索chunked ajax response
  • 如果答案有帮助,请考虑接受它:)
猜你喜欢
  • 1970-01-01
  • 2014-07-15
  • 2012-08-30
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多