2012-12-01 63 views
0

我正在使用以下內容更新一個名爲'output'的DIV。這工作正常,但有一個例外,我想要echo條目來更新父頁面。Ajax/PHP更新DIV

<input type='button' name='Send' value='submit' onclick="javascript: formget(this.form, 'foo.php');"> 

我是foo.php運行一系列的exec()的命令,之間的每個命令是我想顯示echo語句的問題:

<script type="text/javascript"> 
<!-- 
var divid = 'output'; 
var loadingmessage = '<img src="working.gif">'; 
function AJAX(){ 
var xmlHttp; 
try{ 
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari 
return xmlHttp; 
} 
catch (e){ 
try{ 
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer 
return xmlHttp; 
} 
catch (e){ 
try{ 
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); 
return xmlHttp; 
} 
catch (e){ 
alert("Your browser does not support AJAX!"); 
return false; 
} 
} 
} 
} 
function formget(f, url) { 
var poststr = getFormValues(f); 
postData(url, poststr); 
} 
function postData(url, parameters){ 
var xmlHttp = AJAX(); 
xmlHttp.onreadystatechange = function(){ 
if(xmlHttp.readyState > 0 && xmlHttp.readyState < 4){ 
document.getElementById(divid).innerHTML=loadingmessage; 
} 
if (xmlHttp.readyState == 4) { 

document.getElementById(divid).innerHTML=xmlHttp.responseText; 
} 
} 

xmlHttp.open("POST", url, true); 
xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlHttp.setRequestHeader("Content-length", parameters.length); 
xmlHttp.setRequestHeader("Connection", "close"); 
xmlHttp.send(parameters); 
} 

function getFormValues(fobj) 

{ 
var str = ""; 
var valueArr = null; 
var val = ""; 
var cmd = ""; 

for(var i = 0;i < fobj.elements.length;i++) 

{ 
switch(fobj.elements[i].type) 

{ 

case "select-one": 

str += fobj.elements[i].name + 
"=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&amp;amp;"; 
break; 

} 
} 

str = str.substr(0,(str.length - 1)); 
return str; 

} 

//--></script> 

這是使用所謂的在輸出div。

所以它會這樣做:

echo「archive files」; exec(「tar -cvf bar.tar bar.txt foo.txt」);

回顯「備份/用戶」; exec(「tar -cvf /user.tar/user/*」);

我想用戶看到working.gif,但在它下面每個來自foo.php的echo聲明 可以這樣做,怎麼做?

感謝

+0

可以這樣做或我會更好地使用jQuery?如果是的話如何?任何鏈接都會有所幫助!謝謝 – MacMan

+0

我;我試過使用ob_flush(); flush();每個回聲命令後,但沒有幫助。有任何想法嗎 ? – MacMan

回答

0

我不能說我曾經嘗試過在同一個AJAX請求單獨時間發回的數據塊,所以我不知道這是可能的。目前發生了什麼?你只能得到第一個迴應的消息,或者只在最後得到整個迴應?

兩件事情,我知道將工作:

  1. 打破你的PHP腳本分成多個腳本,並以帶獨立AJAX請求執行它們。這隻有在分離的腳本彼此不依賴時纔有效,或者您找到了其他方式在分離的腳本中保持狀態。

  2. 創建iframe並將PHP腳本加載到該腳本中,而不是使用AJAX請求。刷新PHP腳本的輸出應該可以工作。 (如果你曾經使用WordPress,我相信他們使用這種技術來顯示插件更新的進度。)

+0

感謝您的回覆。目前我在最後得到所有輸出。我有一個遊戲,並在Chrome中使用它,但不是IE。 我也發現使用obflush()和flush()似乎將結果一步一步推送到父頁面。 – MacMan