2012-06-20 26 views
1

jQuery函數:使用jQuery來檢索數據從XML文件

function readXMLData(tagName){ 
    var result; 
    function loadfail(){ 
     alert("Error"); 
    } 

    function parse(document){ 
     $(document).find(tagName).each(function(){ 
      result = $(this).find('value').text(); 
     }); 
    } 

    $.ajax({ 
     type: "GET", 
     url: 'config.xml', 
     dataType: 'xml', 
     success: parse, 
     error: loadfail 
    }); 

    //alert(result); 
    return result; 
} 

XML文件:

<?xml version="1.0" encoding="UTF-8" ?> 
<config> 
    <host-prefix> 
     <value>myprefix</value> 
    </host-prefix> 

    <host-url> 
     <value>localhost</value> 
    </host-url> 

    <image-path> 
     <value>imagePath</value> 
    </image-path> 
</config> 

我有這樣的XML文件,我需要從中檢索數據要在另一個jquery函數中使用這些數據,我通過readXMLData("host-prefix")來調用這個函數。

問題:如果我調用函數正如我上面提到,它返回undefined,無論是誰,如果我取消註釋alert(result)readXMLData功能,信息提示undefined文本,但函數返回myprefix(真正的結果)。一切正常。我需要從我的代碼中刪除警告(結果),我的功能仍然可以正常工作。

有幫助嗎?

+0

我硝基甲苯笏知道ü想從這個代碼序列來實現......在你的代碼仔細一看......這可能是錯誤的 – Talha

+0

有另一種方式來加載阿賈克斯/ jQuery的/ JavaScript的這個XML文件中HTML ??? –

+0

看到我的答案.. – Talha

回答

0

你不應該嘗試從ajax函數返回數據。 Ajax的定義是異步的,所以你永遠不知道結果何時會回來,執行不會停止,直到有回報。因此,你應該打算調用回調...例如:

function readXMLData(tagName, callback){ 
    var result; 

    if(typeof callback != 'function) { 
     return false; 
    } 

    function loadfail(){ 
     alert("Error"); 
    } 

    function parse(document){ 
     $(document).find(tagName).each(function(){ 
      result = $(this).find('value').text(); 
      callback(result); 
     }); 
    } 

    $.ajax({ 
     type: "GET", 
     url: 'config.xml', 
     dataType: 'xml', 
     success: parse, 
     error: loadfail 
    }); 

    // we return true or false which indicates that we fired off the request ok 
    // and nothing more. 
    return true; 
} 

,那麼你會做什麼,你會通過傳遞您需要調用了一個結果,並做一些事情的下一個函數調用它與它:

readXMLData("host-prefix", yourNextFunction); 
1

如下調用readXMLData()函數。由於ajax是異步的,所以它不會立即得到結果,所以這就是爲什麼它會提示'undefined'。

var result; 
var requiredTagName; 

function readXMLData(tagName) 
{ 
     requiredTagName = tagName; 

     $.ajax({ 
      type: "GET", 
      url: 'config.xml', 
      dataType: 'xml', 
      success: parse, 
      error: loadfail 
     }); 
} 
    function loadfail() 
    { 
     alert("Error"); 
    } 

    function parse(document) 
    { 
     $(document).find(requiredTagName).each(function(){ 
      result = $(this).find('value').text(); 
     }); 
    }