0

假设您有一个 data.xml 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <item>value1</item>
    <item>value2</item>
    <item>value3</item>
</root>

我正在尝试将所有数据配置存储到一个变量中,以便在我的 .js 代码中使用它:

$(document).ready(function() {
        'use strict';
        jQuery.extend({
            getValues: function(url) {
            var result = null;
            $.ajax({
                url: url,
                type: 'get',
                dataType: 'xml',
                async: false,
                success: function(data) {
                result = data;
                }
            });
               return result;
            }
        });

        results = $.getValues("data.xml");
        console.log(results);
});

如果我刷新页面,我会在结果变量中得到一个 Document 对象,其中包含 URL、baseURI、body 等字段......

如果我再次刷新,我会得到一个带有 data.xml 数据的#document 对象:

<root>
    <item>value1</item>
    <item>value2</item>
    <item>value3</item>
</root>

因此,每次有人访问该 url 时,返回的对象类型都会发生变化。

我对此有两个问题:

  1. 如何使返回值始终#document?(其中包含来自 .xml 文件的数据)

  2. 如何从#document 访问元素?

我试过使用:

console.log(results.root.item);
console.log(results.find("item"));

但两者都给我错误。

也许有更好的方法来做到这一点(意味着将 xml 数据读入单个变量)。

有什么建议么?

4

2 回答 2

1

您在 ajax 请求完成之前返回结果。您必须等待ajax返回,然后调用回调函数:

$(document).ready(function() {
        'use strict';
        jQuery.extend({
            getValues: function(url, callback) {
            var result = null;
            $.ajax({
                url: url,
                type: 'get',
                dataType: 'xml',
                async: false,
                success: function(data) {
                    callback.call(this, data);
                }
            });
            }
        });

        $.getValues("data.xml",function(data){
             console.log(data);
        });

});
于 2012-06-01T12:18:58.877 回答
0

您可以通过这种方式选择 xml 标签:

success: function(data) {
    parser(data);
}

function parser(data) {
 ...
}
于 2012-06-01T11:42:01.820 回答