我在alertbox彈出窗口中不斷定義...我是否缺少某些東西?並且有關於nodeArray[0]
的數據,因爲如果我將它放在for循環中,它會正確提醒。在嵌套函數之間傳遞數組()
function other(){
oNodeArray = grabNodes(env, poolName);
}
我在alertbox彈出窗口中不斷定義...我是否缺少某些東西?並且有關於nodeArray[0]
的數據,因爲如果我將它放在for循環中,它會正確提醒。在嵌套函數之間傳遞數組()
function other(){
oNodeArray = grabNodes(env, poolName);
}
Ajax調用異步:
function grabNodes(env, poolName){
var env = "dev";
var nodeArray = new Array();
var ajaxRequest; //initialize ajax object
var browser = navigator.appName; //find the browser name
if(browser == "Microsoft Internet Explorer"){
/* Create the object using MSIE's method */
ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
else{
/* Create the object using other browser's method */
ajaxRequest = new XMLHttpRequest();
}
// Create a function that will receive data sent from the server
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
// Get the data from the server's response
//what on this page is changing
var xmlRes=ajaxRequest.responseXML.documentElement;
try {
for(var i=0; i<xmlRes.getElementsByTagName('node').length;i++){
nodeArray[i] = xmlRes.getElementsByTagName('node')[i].firstChild.nodeValue;
}//end for loop
}
catch (err){
}
alert(nodeArray[0]);
}
}
//return nodeArray;
}
函數的調用。 alert(nodeArray[0]);
執行之前您分配給ajaxRequest.onreadystatechange
的功能。
把alert
放在回調中,它會起作用(只要你得到一個有效的響應)。 每個必須對結果進行操作的代碼都必須從回調中調用。
更新:您無法返回數據。你必須重構你的代碼才能使用回調。
如果您當前的代碼是這樣
oNodeArray = grabNodes(env, poolName);
// work on `oNodearray`
你必須將其更改爲:
grabNodes(env, poolName, function(oNodearray) {
// work on `oNodearray`
});
和Ajax回調有打電話給你傳遞的功能和數組傳遞給它:
function grabNodes(env, poolName, callback){
//....
ajaxRequest.onreadystatechange = function(){
// stuff
callback(nodeArray);
}
}
因爲Ajax調用是異步的,所以它們不會阻止代碼的執行。您需要傳遞一個函數,一旦收到數據就會執行該函數。
的進一步說明:
var nodeArray = [];
初始化一個數組。var env = "dev";
會影響參數env
。如果要指定一個默認值,做
env = env || 'dev';
Ajax調用是最有可能不是在調用警報尚未完成。這應該放在onreadystatechange處理程序中。
所以我提出了警報,它給我的數據,所以我知道它的工作。但是我不理解退貨聲明......如果我把它放在那裏它返回到哪裏?我需要它返回到另一個函數中的oNodeArray,它調用grabNodes() – Jim 2011-02-22 21:00:39
@Jim:你不需要在回調中放置一個return語句,它將不起作用。請看我更新的答案。 – 2011-02-22 21:02:51
當您在ajax回調中設置數組時,grabNodes()已經返回。您需要重新編寫代碼,以便您可以使用nodeArray作爲ajax回調的參數調用給定的函數。你試圖以同步的方式編程它,但是ajax在定義上並不是同步的。 – 2011-02-22 21:07:24