我需要帮助解决我无法使用JQUERY实时输出JSON响应的问题,而PHP调用外部命令行脚本。
首先,我使用this JQUERY AJAX file upload with progress bar example来处理文件上传。所以在这里你几乎可以看到我对该机制的编码。虽然我添加了" dataType:' json'"处理响应的选项。
在PHP脚本中,我处理文件上传,清理文件名等。然后我调用外部cmd进程。此过程会抛出更新,例如"已完成:10%",直至"已完成:100%"。这是我想通过json扔出浏览器的信息。这是我的代码:
ob_implicit_flush(true);
ob_end_flush();
$cmd = //call exe with arguements
$descriptorspec = array(
0 => array("pipe", "r"),
1 => array("pipe", "w"),
2 => array("pipe", "w")
);
flush();
$process = proc_open($cmd, $descriptorspec, $pipes, NULL, NULL);
if (is_resource($process)) {
$return = array();
while ($s = fgets($pipes[1])) {
$return['status'] = substr($s,0,16);
echo json_encode($return);
//file_put_contents($file, json_encode($return));
flush();
}
}
proc_close($process);
这会抛出这个json输出:
{"status":"Completed: 10%\r\n"}
{"status":"Completed: 13%\r\n"}
{"status":"Completed: 16%\r\n"}
... truncated ...
{"status":"Completed: 90%\r\n"}
{"status":"Completed: 95%\r\n"}
{"status":"Completed: 100%\r","output":"<p><img src=\"images\/accept.png\" width=\"16\" height=\"16\" alt=\"\" valign=\"top\" \/> Successfully converted:<br \/><br \/><a href=\"test.zip\">test.zip<\/a><\/p>"}
所以,我希望能够每2/3秒输出一次状态值。最终输出值在JQUERY成功函数中输出。
请记住,我是JQUERY和AJAX的轻量级用户。
[编辑]备用路由是我将状态消息写入唯一的txt文件,并且每隔几秒就进行一次JQUERY轮询。