【发布时间】:2011-09-27 20:55:14
【问题描述】:
在开发 Web 应用程序时,我充分利用了 javascript php 和 ajax。
我想打电话
display_terminal('feedback_viewer','logs/init-raid-log.txt','Init-Raid');
构建我的终端并调用 feed_terminal(),它有自己的 setTimeout() 递归调用
var url='../edit_initRaid.php';
status_text('Initializing raid-array. Please wait a moment...');
var xmldoc=ajaxPHP2(url,2);
一个 php 文件,仅此而已
exec("sudo /usr/bin/./init-raid-drives-web.sh");
这就是我失败的地方。直到 php 文件中的 exec() 返回到 php 文件并且 php 文件返回到 javascript 之后才执行下一行。这并不重要,但我很确定以前不是这样,因为最初 bash 脚本将在 2 分钟的时间段内执行,并且 javascript 将成功地使用 feed_terminal 更新 html。现在已经不是这样了。
alert("javascript has returned from ajax call");
if (xmldoc) {
status_text('Raid-array initialized successfully. System will now restart.You must re-login to FDAS-Web.');
下面是你的问题的一堆代码
最后我的问题是,我如何在 ajax 调用期间运行 javascript? 或者我的问题应该是,我怎样才能让 edit_initRaid 返回一个 xmldoc,而不等待 exec() 返回,或者即使脚本没有完成,我如何让 exec() 返回?
function initRaidArray(){
if (document.getElementById('initRaid_doubleCheck')){
if (document.getElementById('initRaidHideButtonSpot'))
document.getElementById('initRaidHideButtonSpot').innerHTML = '';
var spot=document.getElementById('initRaid_doubleCheck');
spot.innerHTML='';
spot.innerHTML='This may take a few moments. Please wait.';
}
display_terminal('feedback_viewer','logs/init-raid-log.txt','Init-Raid');
var url='../edit_initRaid.php';
status_text('Initializing raid-array. Please wait a moment...');
var xmldoc=ajaxPHP2(url,2);
alert("javascript has returned from ajax call");
if (xmldoc) {
status_text('Raid-array initialized successfully. System will now restart. You must re-login to FDAS-Web.');
}
}
其中 display_terminal() 做了两件事,构建一个表并将其附加到页面,并调用 feed_terminal(logfile,bigDiv,0)
function feed_terminal(logFile,bigD,lap){
// AJAX
bigD.innerHTML = '';
var url='../view_xml_text.php';
/*
* lap(0)=clear file , lap(1)=do not clear file
*/
url+='?logFile='+logFile+'&lap='+lap;
var XMLdoc=ajaxPHP2(url,2);
var xmlrows = XMLdoc.getElementsByTagName("line");
alert("xmlrows.length=="+xmlrows.length);
// empty file
if (xmlrows.length==0){
var d = document.createElement('div');
var s = document.createElement('span');
s.innerHTML='...';
d.appendChild(s);
bigD.appendChild(d);
} else {
// Parse XML
for (var i=0;i<xmlrows.length;i++){
if (xmlrows[i].childNodes[0]){
if (xmlrows[i].childNodes[0].nodeValue){
var d = document.createElement('div');
var s = document.createElement('span');
s.innerHTML=xmlrows[i].childNodes[0].nodeValue;
d.appendChild(s);
bigD.appendChild(d);
}
}
}
}
setTimeout(function(){feed_terminal(logFile,bigD,1)},2000);
}
其中最重要的一项是 setTimeout() 调用以继续访问 php 文件,该文件返回文件中行的 xml。
function ajaxPHP2(url,key)
{
if (window.XMLHttpRequest) {
xml_HTTP=new XMLHttpRequest();
if (xml_HTTP.overrideMimeType) {xml_HTTP.overrideMimeType('text/xml');}
} else { xml_HTTP=new ActiveXObject("Microsoft.xml_HTTP"); }
xml_HTTP.open("GET",url,false);
xml_HTTP.send(null);
if (key){return xml_HTTP.responseXML;}
}
【问题讨论】:
标签: php javascript ajax linux exec