2013-07-01 26 views
1

我发送POST请求的PHP文件这样一个简单的jQuery功能:如何在完成执行PHP脚本之前接收jQuery post响应?

$.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

“action done”消息由PHP发送。脚本终止后,无法获取响应_before_。 –

+1

@SalmanA只有在输出缓冲打开的情况下才会发生这种情况,否则在执行完成之前会将“已完成的操作”发送给浏览器。 – MrCode

+0

是的,在脚本终止前,可以将“已完成动作”消息发送给浏览器,但在连接关闭之前,AJAX处理程序的成功/完成事件将不会触发。 –

回答

1

这可能与简单的Javascript ajax。在请求完成之前收到数据时,onreadystatechange事件将以readyState为3。

在下面的例子中,newData将包含新的数据。我们必须做一些处理,因为XHR实际上给我们提供了迄今为止的全部数据,所以如果我们只想知道新数据,我们必须记录最后一个索引。

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的阿贾克斯,this answer建议jQuery的,您可以绑定到readystatechange,但我没有测试它。

相关问题