如何在完成PHP脚本执行之前接收jQuery post响应?

时间:2013-07-01 12:27:21

标签: php javascript ajax jquery

我有一个简单的jquery函数,它将一个post请求发送到这样的PHP文件:

$.post('/file.php',
{
     action: 'send'   
},

function(data, textStatus)
{     
     alert(data);
});

还有一个PHP文件:

<?php

/* Some SQL queries here */

echo 'action done';

/* echo response back to jquery and continue other actions here */

?>
默认情况下,jQuery会在发出警报之前等待执行整个PHP脚本。有没有办法在执行PHP文件的其余部分之前提醒完成的操作

由于

1 个答案:

答案 0 :(得分:1)

可以使用普通的Javascript ajax。在请求完成之前收到数据时,onreadystatechange事件将以readyState 3触发。

在下面的示例中,newData将包含新的数据。我们必须进行一些处理,因为XHR实际上在responseText中为我们提供了整个数据,所以如果我们只想知道新数据,我们必须记录最后一个索引。

var httpRequest, lastIndex = 0;

if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    httpRequest = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE 8 and older
    httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}

httpRequest.onreadystatechange = function() {
    if(httpRequest.readyState === 3) {
        var newData = httpRequest.responseText.substring(lastIndex);
        lastIndex = httpRequest.responseText.length;

        console.log(newData);
    } 
};

httpRequest.open('POST', '/file.php');
httpRequest.send('action=send');

对于jQuery ajax,this answer建议jQuery允许你绑定到readystatechange,但我还没有测试过它。