有一个问题困扰我,请帮忙! 我使用jquery的ajax来调用php api。
$.ajax({
type:"POST",
dataType:"json",
data:{type:type,fid:fid,model:'star'},
url:'Recommend/Star/mark',
success:function (data) {
//do something
},
...
});
推荐/明星/标记方法中的PHP代码:
error_reporting(0);
set_time_limit(0);
ob_implicit_flush(true);
ob_end_clean();
ob_start ();
echo json_encode($boolMark);
ob_flush();
flush();
sleep(3);
$this->afterMark($uid, $fid);
我想立即向ajax发送php echo结果,但我的代码不起作用。
如何让php立即将结果发送给ajax,并继续执行剩余的代码?
答案 0 :(得分:1)
....
echo json_encode($boolMark . "<br>\n");
// get the size of the output
$size = ob_get_length();
// send headers to tell the browser to close the connection
header("Content-Length: $size");
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
/******** background process starts here ********/
ignore_user_abort(true);
/******** background process ********/
set_time_limit(0); //no time limit
/******** Rest of your code starts here ********/
答案 1 :(得分:0)
基本上你希望你的代码在&#34;背景&#34;发送回复后,你需要这样做:
// Destroy the current buffer (Just in case...)
ob_clean();
// Start a new buffer
ob_start();
// Send your response.
echo json_encode($boolMark);
// Disable compression (in case content length is compressed).
header("Content-Encoding: none");
// Set the content length of the response.
header("Content-Length: ".ob_get_length());
// Close the connection.
header("Connection: close");
// Flush all output.
ob_end_flush();
ob_flush();
flush();
这会发送完整标头并关闭连接,否则您的连接将保持活动状态,浏览器将等待php脚本终止其执行。
答案 2 :(得分:0)
您还需要在flush()
之后调用这两个函数:
session_write_close();
fastcgi_finish_request();