1

如果 ajax post 的接收者是这样的:

// process/te_bulk.php

$jsonList = '[{"AV"},{"QT"}]';
echo $jsonList;

sleep ( 5 )              // or, continue curl request for jsonList variable 1

$jsonArray = '[{"1","15","JOG"},{"2","20","RUN"}]';
echo $jsonArray;

sleep ( 4 )              // or, continue curl request for jsonList variable 2

$jsonArray = '[{"1","25","SWIM"},{"2","30","BIKE"}]';
echo $jsonArray;

第一次尝试 -将 XHR 加载延迟 5 秒,同时附加两个字符串,这会导致“无效 JSON”:

$.ajax({
  type: "POST",
  url: "process/te_bulk.php",
  contentType: "application/json; charset=utf-8",
  data: { user: "12345" }
}).success(function( msg ) {
  var string = jQuery.parseJSON(msg);
  alert( "Data Returned: "+string );
});

.post() 或 .ajax() 可以分别响应每个回声吗?在浏览器中加载页面 process/te_bulk.php 会产生 5 秒和 4 秒的延迟。换句话说,如何在页面可用时用数据填充页面,而不是在 te_bulk.php 完成处理时接收所有数据。

一种替代方法似乎是:有 2 个 .ajax() 函数,一个用于接收第一个字符串,根据需要处理和调用第二个函数,用于 $jsonArray 数据。

如果这是不可能的,是否有另一种简单的方法来显示所获得数据的“进度”指示器?

4

2 回答 2

1

echo 不会向客户端返回任何内容,因此上面的示例代码不会执行您想要的操作。如果要异步加载页面的某些部分,则必须为每个部分使用单独的 ajax 调用。

请参阅下面凯文的评论,因为缓冲区可能会在请求的过程中被刷新到客户端。

于 2013-04-08T15:04:22.750 回答
0

Ajax 只会在 readystate 为 4 时进入“完成”状态。如果您要刷新缓冲区(这会将任何已经返回的内容发送到浏览器),内容将被发送到浏览器,但是,jQuery 不会解析它直到 readystate 变为 4

考虑到最后一部分,如果您仍然想继续这样做,请检查 responseText 是否正在使用来自 ajax 请求的内容进行更新,因为它正在被刷新。

您必须更新 php 以在每条记录后刷新缓冲区。

于 2013-04-08T15:21:39.923 回答