0

我正在使用以下内容来更新名为“输出”的 DIV。这可以正常工作,但有一个例外,我希望回显条目来更新父页面。

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

这称为使用:

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

我遇到的问题是 foo.php 运行一系列 exec() 命令,每个命令之间是一个 echo 语句,我希望在输出 div 中显示该语句。

所以它会做类似的事情:

echo "存档文件"; exec ("tar -cvf bar.tar bar.txt foo.txt");

echo "备份/用户"; exec ("tar -cvf /user.tar /user/*");

我希望用户看到working.gif,但在它下面每个来自foo.php 的echo 语句可以做到吗?怎么做?

谢谢

4

1 回答 1

0

我不能说我曾经尝试过用一个 AJAX 请求在不同的时间发回大块数据,所以我不确定这是否可能。目前会发生什么?你是只得到第一个回显的消息,还是只得到最后的整个响应?

我知道有两件事会起作用:

  1. 将您的 PHP 脚本分解为多个脚本,并使用单独的 AJAX 请求按顺序执行它们。这仅在分离的脚本不相互依赖或您找到其他方法在分离的脚本中保持状态时才有效。

  2. 创建一个 iframe 并将 PHP 脚本加载到其中,而不是使用 AJAX 请求。然后刷新 PHP 脚本的输出应该可以工作了。(如果您曾经使用过 Wordpress,我相信他们会使用这种技术来显示插件更新的进度。)

于 2012-12-02T23:34:31.497 回答