1

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)inreadXMLData函数,警报都会出现undefined文本但函数返回myprefix(真实结果)。一切正常。我需要从我的代码中删除警报(结果)我的功能仍然正常工作。

有什么帮助吗?

4

2 回答 2

1

调用readXMLData()函数如下。由于 ajax 是异步的,它不会立即为您提供结果,因此,这就是它警告“未定义”的原因。

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();
        });
   }
于 2012-06-20T12:06:00.527 回答
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);
于 2012-06-20T12:04:21.957 回答