2011-07-27 10 views
2

XML値をインポートしていますか?

...私は一つのアイテムだけを持つ単純なXML ...

<myXML> 
    <valuesItem 
     name = 'name' 
     age = 'age' 
     gender = 'gender' 
    /> 
</myXML> 

を持っている...そして、このようなjQueryオブジェクトの新しい値であることが唯一のアイテムの属性値をインポートすると仮定すると、

var myObject = { 
     name: 'name', 
     age: 'age', 
     gender: 'gender' 
}; 

...どのように私は進めますか?

私はこのように私の目的を達成しようとしましたが、私はこれまでのところ成功していない:

var myObject = {}; 

$.get(myXML.xml, function(xmlData) { 
     var xmlValues = {}; 

     $(xmlData).find('valuesItem').each(function() { 
      var $item = $(this); 
      xml Values = { 
        name: $item.attr('name'), 
        age: $item.attr('age'), 
        gender: $item.attr('gender') 
      }; 
     }); 

     $.extend(myObject, xmlValues); 
}); 

にはどうすれば公共$に.get()の戻り結果を作ることができますか?

+0

tyがエラーに気づいていなかったと私は私が...タイトルに – RArtDesign

答えて

3

ここでの問題は、非同期のajax呼び出しを作成していることです。 $ .ajaxを使用して呼び出しを非同期にしないか、xmlデータを使用する必要がある場合は、$ .get呼び出しの成功関数で関数を呼び出す必要があります。あなたができる例えば

:編集Tomalakため

var myObject = {}; 

$.ajax({ 
    type: 'get', 
    url: 'myXML.xml', 
    dataType: 'xml', 
    async: false, 
    success: function (xmlData) { 

     $(xmlData).find('valuesItem').each(function() { 
      var $item = $(this); 
      myObject = { 
        name: $item.attr('name'), 
        age: $item.attr('age'), 
        gender: $item.attr('gender') 
      }; 
     }); 
    } 
}); 
//here myObject is set because it waits for the call to finish 
+0

おかげニコラ探している機能を提供しますが、これは動作しませんいくつかの編集を行ったと思います! あなたは私のコードmyObjectというに気付いた場合(GET外で宣言されている) 論理が同じである、あまりにも...唯一の違いは、私の場合、私は$ .extendを使用しながら、あなたはmyObjectというに直接新しい値を代入しようとしたことです2つのオブジェクトをマージ... – RArtDesign

+0

はい、あなたは正しいです:問題が$に.get()の呼び出しは非同期ですので、あなたは$アヤックスを使用して、それを同期させる必要がありますが、私は –

+0

がOKだと思うしていること!これだよ! "非同期"は私の問題でした!ありがとう、ニコラ! – RArtDesign

1

このようにすることができます。

var myObject = {}; 

$.ajax({ 
    type: 'get', 
    url: 'myXML.xml', 
    dataType: 'xml', 
    success: function (data) { 
    myObject = data; 
    } 
}); 

もつともあなたは$.ajax()後に直接XMLを処理するコードを入れた場合、コールが完了していないので、あなたは、エラーのすべての種類に実行されます。サーバが要求に応答した刚性

あなたがそうのような成功の関数内で、あなたのロジックのすべてを置くことをより良い..成功として

$.ajax({ 
    type: 'get', 
    url: 'myXML.xml', 
    dataType: 'xml', 
    success: function (data) { 
    //do stuff with data here 
    //the variable "data" holds all of your xml, parsed into a JavaScript object 
    } 
}); 

は呼び出されません。

EDIT:あなたの特定の用途に合わせてこのようなことを行う方が良いかもしれません。

まず、引数dataをとり、その後、プラグイン

startPlugin = function (data) { 
    var newoptions = {}; 
    newOptions.name = data.myXML.valuesItem.name; 
    newOptions.age = data.myXML.valuesItem.age; 
    newOptions.gender = data.myXML.valuesItem.gender; 

    //start the plugin here with newOptions 
} 

を設定する関数を定義成功コールバックとしてAJAXにその関数を渡します。

$.ajax({ 
    type: 'get', 
    url: 'myXML.xml', 
    dataType: 'xml', 
    success: startPlugin 
}); 

$.ajax()であなたはリクエストの同期を行うためにfalseにasyncを設定することができますが、それは悪い習慣と考えられています。

+0

TYグレッグをjqueryのを使用することはできません推測します! 私はこれを試してみます... $ .get関数に固執し、私が間違ったことを理解しようとするのが最善の解決策ではありません!知らせます! – RArtDesign

+0

@RArtDesign '$ .get()'は '$ .ajax()'の省略形です。いくつかのパラメータが記入されています。あなたがそれを行うとき、あなたは 'dataType'をxmlに設定することができます。これは、jQueryがあなたのためにxml解析を行い、あなたのメンバを' data.myXML.valuesItem.name' –

+0

。 。 。私は$ .getを使用するのと同じ結果を得ます...闘争グレッグのための「未定義」 – RArtDesign

関連する問題