2013-07-01 25 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,但我沒有測試它。

相關問題