我正在使用以下内容更新名为'output'的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;";
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中显示。
所以它会做类似的事情:
回显“档案文件”; exec(“tar -cvf bar.tar bar.txt foo.txt”);
回声“备份/用户”; exec(“tar -cvf /user.tar / user / *”);
我希望用户看到working.gif,但是在foo.php下面的每个echo语句 可以这样做吗?
由于
答案 0 :(得分:0)
我不能说我曾尝试使用单个AJAX请求在不同的时间发回数据块,所以我不确定它是否可行。目前发生了什么?你只得到第一条回音信息,或者只是在最后得到整个回应?
我知道的两件事情会奏效:
将PHP脚本分解为多个脚本,并按照单独的AJAX请求执行它们。这只有在分离的脚本不相互依赖或者您找到其他方法在分离的脚本中保持状态时才有效。
创建iframe并将PHP脚本加载到其中,而不是使用AJAX请求。然后刷新PHP脚本的输出应该工作。 (如果您曾经使用过Wordpress,我相信他们会使用这种技术来展示插件更新的进度。)