スタックされたjavascriptオブジェクトの動的構築

私は、XMLファイルからすべてのパラメータを読み込んでフラッシュで書き込まれた一連のインタラクティブなアクティビティを持っています。私たちはFLASHから離れるので、必要なXML要素を読み込んで、すべての要素とそのプロパティを含むjavascriptオブジェクトを動的に作成するスクリプトを作成しています。最後に、オブジェクトをJSON.stringify()で渡し、JSON化されたバージョンを渡します。

私は、JQueryを使ってajax呼び出しを使用してXMLを読み込み、次にJSとJQUERYの組み合わせを読んでいます。 DOMセレクタのjqueryが好きです。

私は一緒に行くように私はこのすべてのものを学んでいると私は私が私は私が(。)と要素の束を処理する必要があるポイントに達すると私は壁にヒットしたので、私は開発業者ではない。私は確信していませんが、私は構文のことを推測しています。すべてのことは、XMLのように見える "パネル"を追加する時間が来るまで、偉大な作業をしていた+ ... 私は各パネルを処理しなければならない。

$.ajax({
    type: "GET",
    url: "activity.xml",
    dataType: "xml",
    success: function(xml) {
        var activity = {
            title : {
                text: $(xml).find('title').text(), 
                xpos: $(xml).find('title').attr('xpos'), 
                ypos: $(xml).find('title').attr('ypos')
            },
        rubric : {
                text: $(xml).find('rubric').text(), 
                xpos: $(xml).find('rubric').attr('xpos'), 
                ypos: $(xml).find('rubric').attr('ypos')
            },
        panels: {
                $(xml).find('panel').each(function() {
                    panel :{width: $(this).attr('width'), 
                    height: $(this).attr('height'), 
                    xpos: $(this).attr('xpos'), 
                    ypos: $(this).attr('ypos')
            }});// end .each()
        }// end panels object
   });//end ajax.get(xml)   

   var activity_json = JSON.stringify(activity);

私はこのようにしていないと確信していますが、私はそれがどのようにすべきかわかりません。

前もって感謝します

1
これをJSfiddleに単純化しておけば、元のデータを見ることなく問題を捕まえるのは難しいです。私が過去に実行したことの1つは、XMLが有効であることを確認する必要があることです。フラッシュルーチンの中には、Webブラウザよりもはるかに寛容なものがあります。 activity.xmlのすべてが正しく検証されていることを確認しましたか?
追加された 著者 pp19dd,

1 答え

あなたの問題はここになければならない

panels: {
            $(xml).find('panel').each(function() {
                panel :{width: $(this).attr('width'), 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
        }});// end .each()

次のようにコードを書き換えます。

 var activity = {
        title : {
            text: $(xml).find('title').text(), 
            xpos: $(xml).find('title').attr('xpos'), 
            ypos: $(xml).find('title').attr('ypos')
        },
    rubric : {
            text: $(xml).find('rubric').text(), 
            xpos: $(xml).find('rubric').attr('xpos'), 
            ypos: $(xml).find('rubric').attr('ypos')
    },
    panels : []
 };



  $(xml).find('panel').each(function() {
           var data = {
                panel :{
                    width: $(this).attr('width')
                }, 
                height: $(this).attr('height'), 
                xpos: $(this).attr('xpos'), 
                ypos: $(this).attr('ypos')
           }
           activity.panels.push(data);
  });

編集

あなたはオブジェクトリテラルの構文を破っています。配列を初期化し、オブジェクト宣言を終了する必要があります。次にコレクションを繰り返し、オブジェクトの panels プロパティに適切な値を設定します。

編集

うん。私はあなたが何を意味するかを見ます。

Here is the fiddle that iterates over your dom elements. I used the native JavaScript api. I'm not very familiar with, say, jQuery2XML.

0
追加された
@Nuevallorker私は答えを更新しました。私は名前の代わりにちょうどindecesを使用しました。しかし、少し掘り下げて、名前を使って属性を参照する方法を見つけるでしょう。乾杯。
追加された 著者 Oybek,
ありがとう!私はそれをコメントアウトするとうまく動作するので、それは間違いなくそこに(パネルの部分)ええ。私はあなたの解決策を試してみましたが、ちょっとした間違いがありました。最初のデータオブジェクトではなく、2番目以降のデータオブジェクトの閉じ括弧の後にactivity.panels.push(data)を移動するだけでした。だから私はそれぞれのプロパティにアクセスする方法がわかりませんが、これ以外はこれは良いようです。 panels.panel [x] .widthは私のために働いていませんでした。
追加された 著者 Nuevallorker,
これは私の道のりでよく私を得るでしょう。どうもありがとう!
追加された 著者 Nuevallorker,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript