0

data.xmlファイルがあると想像してください。

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

これを使用して.jsコードで使用するために、すべてのデータ構成を1つの変数に格納しようとしています。

$(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);
});

ページを更新すると、結果変数にURL、baseURI、bodyなどのフィールドを持つDocumentオブジェクトが表示されます...

もう一度更新すると、data.xmlからのデータを含む#documentオブジェクトが結果に表示されます。

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

したがって、返されるオブジェクトのタイプは、誰かがURLにアクセスするたびに変化します。

これについて2つの質問があります。

  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

you can select xml tags in this way:

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

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