2013-04-24 76 views
0

我有下面的代碼,但是當我運行代碼時,它返回爲undefined。我不知道爲什麼會發生這種情況!定義的變量返回undefined

function loadServiceXml(){ 
    $.get("/xml/ServiceUrls.xml", function(xml){ 
     return $.xml2json(xml); 
    }); 
} 

function getMajorGroups(){ 
    //get the base element to be created. 
    var jsonXmlObject; 
    jsonXmlObject = loadServiceXml(); 
    var element = $('.item-group-button').first(); 

} 

響應返回XML文件時沒有任何問題,當我使用螢火蟲打破並檢查變量的值時,它返回爲未定義。

+0

AJAX回調是異步的。運行您要執行的代碼,以避免回調。這真的必須是JavaScript中最常問的問題。 – elclanrs 2013-04-24 05:56:39

+0

「當我運行代碼時」 - 你運行什麼代碼?你是什​​麼意思「響應返回XML文件沒有任何問題」?什麼反應? – Floris 2013-04-24 05:57:22

+4

你的loadServiceXml不返回任何東西,只有你傳遞給get()的匿名函數返回一些東西 – 2013-04-24 05:57:24

回答

1

$.get是一個異步操作。所以實際發生的是你的loadServiceXml()方法返回undefined,因爲它沒有顯式地返回任何東西。你必須做你打算在函數內部工作你從你的$.get回調傳遞給$.get

function loadServiceXml(){ 
    $.get("/xml/ServiceUrls.xml", function(xml){ 
     // Process the response here 
    }); 
} 
+0

我將返回的xml對象轉換爲json對象,我試着將它分配給一個變量,但是也返回undefined! – 2013-04-24 06:05:26

+0

從$ .get返回任何內容都無濟於事。你必須在回調中處理xml(或委託給另一個函數)。 – NilsH 2013-04-24 06:07:59

+0

那麼我使用xml2json來處理xml並將其解析爲json對象!但是我怎樣才能讓這個對象出現在另一個功能上呢!或者可能存儲在全局變量中! – 2013-04-24 06:11:39

1

return不返回值超出loadServiceXml。該功能將不會返回任何東西!此外,您還有一個異步調用,您試圖將其視爲同步調用。

相反,嘗試通過一個回調函數來loadServiceXml與返回值被調用一次值回來:

function loadServiceXml(callback){ 
    $.get("/xml/ServiceUrls.xml", function(xml){ 
     callback($.xml2json(xml)); 
    }); 
} 

function getMajorGroups(){ 
    //get the base element to be created. 
    loadServiceXml(function(jsonXmlObject) { 
     var element = $('.item-group-button').first(); 
    })); 
} 

在這裏,你傳遞一個匿名函數來loadServiceXml,然後調用並通過了一旦對象可用,將XML對象作爲參數。所以一旦你的呼叫完成,執行跳回getMajorGroups中的匿名函數。