如何将php立即发送给ajax

时间:2016-05-12 09:32:15

标签: php ajax

有一个问题困扰我,请帮忙! 我使用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,并继续执行剩余的代码?

3 个答案:

答案 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脚本终止其执行。

参考:continue processing php after sending http response

答案 2 :(得分:0)

您还需要在flush()之后调用这两个函数:

session_write_close(); 
fastcgi_finish_request();