雖然開發一個Web應用程序,我很大的使用javascript php和ajax。如何在ajax調用期間運行javascript?
我想打電話給
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.');
下面是你的問題
一串代碼最後我的問題是,我怎麼能運行JavaScript的AJAX通話錄音嗎? 或者,也許我的問題應該是,我怎麼能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(日誌文件,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;}
}
感謝您的幫助,此工作 –