使用jQuery从XML文件中检索数据

时间:2012-06-20 11:55:35

标签: javascript jquery html xml

JQuery功能:

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(真实结果)。一切正常。我需要从我的代码中删除警报(结果)我的功能仍然可行。

任何帮助?

2 个答案:

答案 0 :(得分: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();
        });
   }

答案 1 :(得分: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);