Jquery .ajax()能否处理多个返回值,这些值之间的间隔为几秒钟?

Jquery .ajax()能否处理多个返回值,这些值之间的间隔为几秒钟?,jquery,ajax,Jquery,Ajax,如果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 (

如果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()能否分别响应每个回显?在浏览器中加载页面进程/te_bulk.php会导致5秒和4秒的延迟。换句话说,如何在页面可用时使用数据填充页面,而不是在te_bulk.php完成处理时接收所有数据

另一种方法是:使用2.ajax()函数,其中一个函数用于接收第一个字符串,根据需要处理并调用$jsonArray数据的第二个函数


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

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


请参阅下面Kevin的评论,因为缓冲区可能会通过请求的一部分被刷新到客户端

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

请参阅下面Kevin的评论,因为缓冲区可能会通过请求的一部分被刷新到客户端

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

记住最后一部分,如果您仍然想继续,请检查responseText是否在刷新时使用来自ajax请求的内容进行更新

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

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

记住最后一部分,如果您仍然想继续,请检查responseText是否在刷新时使用来自ajax请求的内容进行更新



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

为什么不返回一个包含所有值的json数组?不,它只在readystate为4(完成)时解析结果。至于进度指标,同样是否定的,除非你想实施一个过程来跟踪它。@PhilippeBoissonneault,因为所有结果可能需要15秒,而我希望显示进度。“数据”来自curl请求。好吧,这样不行,你必须分别处理每个curl请求。@David这是真的,但只有这样你才能控制代码执行并防止争用条件,如果两个函数正在写入同一个变量为什么不返回一个包含所有值的json数组?不,它将仅在readystate为4(完成)时解析结果。至于进度指标,同样是否定的,除非你想实施一个过程来跟踪它。@PhilippeBoissonneault,因为所有结果可能需要15秒,而我希望显示进度。“数据”来自curl请求。好吧,这样不行,你必须分别处理每个curl请求。@David这是真的,但只有这样,如果两个函数都在写同一个变量,你才能控制代码执行并防止争用情况。请注意,返回“parts”可能很重要在通过刷新缓冲区来处理整个页面之前,ajax仍然不会进入完整状态,直到整个页面返回。Justin,我不同意第一句话。脚本正在返回一些内容。在ajax中,从发送到返回延迟了5秒,两个php json变量一个接一个地回显。在浏览器中,处理脚本在5秒延迟后回显第二个变量。@只有当php在回显后刷新缓冲区时,才会出现这种情况。我不知道它是不是。@David,正如Kevin所说,在继续下一个echo之前,您必须调整代码以刷新缓冲区并有效地将数据返回到客户端。当您看到数据被返回到客户端时,您是否同时看到所有3个echo的响应,或者它是否支持它们之间的“休眠”?如果没有ob_flush(),它仅在浏览器中查看接收文件时才支持“休眠”。使用.ajax(),警报在发送后延迟9秒。需要注意的是,在刷新缓冲区处理整个页面之前,可以返回页面的“部分”,但在返回整个页面之前,ajax仍然不会进入完整状态。Justin,我不同意第一句话。脚本正在返回一些内容。在ajax中,从发送到返回延迟了5秒,两个php json变量一个接一个地回显。在浏览器中,处理脚本在5秒延迟后回显第二个变量。@只有当php在回显后刷新缓冲区时,才会出现这种情况。我不知道它是不是。@David,正如Kevin所说,在继续下一个echo之前,您必须调整代码以刷新缓冲区并有效地将数据返回到客户端。当您看到数据被返回到客户端时,您是否同时看到所有3个echo的响应,或者它是否支持它们之间的“休眠”?如果没有ob_flush(),它仅在浏览器中查看接收文件时才支持“休眠”。使用.ajax(),警报在发送后延迟9秒。在对Justin的评论中,viewi