2012-04-16 15 views
1

私がやっていたことは、XMLファイルを読み込んで、jQuery経由でHTMLファイルに取り込むことです。jQueryで解析されたXMLデータを返す

多くのチュートリアルで見つけたように、私はjQueryの.get()メソッドを使用しています。それは1つの問題を除いて私をうまく提供します!

これはXMLファイルである:ここで

<?xml version="1.0" encoding="utf-8" ?> 
<books> 
    <book title="CSS Mastery" imageurl="images/css.jpg"> 
    <description> 
     info goes here. 
    </description> 
    </book> 

    <book title="Professional ASP.NET" imageurl="images/asp.jpg"> 
    <description> 
     info goes here. 
    </description> 
    </book> 

    <book title="Learning jQuery" imageurl="images/lj.jpg"> 
    <description> 
     info goes here. 
    </description> 
    </book> 
</books> 

は、jQueryのコードと私のHTMLファイルです:

<!doctype html> 
<html> 
    <head> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript" > 
     $("document").ready(function() { 
     $.get("one.xml", function(d) { 
      var title = []; 
      var description = []; 

      $(d).find("book").each(function() { 
      title.push($(this).attr("title")); 
      description.push($(this).find("description").text()); 
      }); 

      console.log(title); 
     }); 
     }); 
    </script> 
    </head> 
    <body> 
    // BODY contents... 
    </body> 
</html> 

私が何をしたいのか、私はタイトルと説明したいれます私はこれらの配列を他の関数の中で使うことができるように返されます。 jQueryのコードによれば、私のtitle配列は現在consoleに印刷されていますが、メソッドの外にtitle配列を印刷しようとすると、"title is undefined"と表示されます。

私は関数の最後に配列を返そうとしましたが、運はありませんでした。このコードブロックで

<!doctype html> 
<html> 
    <head> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     $("document").ready(function() { 
     $.get("one.xml", function(d){ 
      var title = []; 
      var description = []; 

      $(d).find("book").each(function() { 
      title.push($(this).attr("title")); 
      description.push($(this).find("description").text()); 
      }); 
     }); 

     console.log(title); 
     }); 
    </script> 
    </head> 
    <body> 
    // BODY contents... 
    </body> 
</html> 

それは"title isn't definedを言って、私はtitle配列を慰めてい気づかされます。私は私の質問は明らかにされたりしていない場合ので、私はコードを私に以下のエラーを与えてthatsの貼りわからないんだけど.get()メソッドの外部にあります。

答えて

0

可変スコープのため、hereをご覧ください。タイトル&の説明をjavascriptの他の関数で使用したい場合は、タイトル&(内部コールバック関数$.get)を保存した直後にjavascript関数を直接呼び出すことができます。あなたは、他の機能の中にあるものを2つの変数を使用することができますので、それがグローバルスコープになります変数名の前にvarを使用してはいけない場合

title = []; 
description = []; 

$("document").ready(function(){ 
$.get("one.xml", function(d){ 
    var title  = []; 
    var description = []; 
    $(d).find("book").each(function(){ 
     title.push($(this).attr("title")); 
     description.push($(this).find("description").text()); 
    }); 
    call_to_your_function_with_title_and_desc(title, description) 
}); 
+0

私はこれを前に考えましたが、それ以外の方法があれば興味がありました。私はかなり新しいjqueryにとにかく私はあなたの助けに感謝します!いいぞ! –

+0

@FoysalAhmed - あなたの好奇心を理解してjQueryを理解していますが、あなたの質問の答えが見つからない場合は、新しい質問を作成してください...とにかく運が良ければ... –

+0

私はgoogleとstackoverflowで検索しましたが、そのような方法で誰かを見つけられませんでした。私が見たすべてのチュートリアルと解決策は、ドキュメントのxmlファイルから受け取ったデータを印刷することです。それが私が問題を投稿しなければならなかった理由です。私は、関数の外に返されたデータを取得する方法があると思っていました。 –

1

はちょうど以下のように使用します。

+0

@Tonu Bhai、それはうまくいくでしょうが、非常に悪い習慣です:( コールバックプッシュデータの前に実行されるので、 'console.log'はまだ動作しません。 – Rifat

+0

悪いか良い習慣状況: で定義することができます。その場合、そのスコープ内でコールバックメソッドを使用する必要があります。 –

+0

再び、__jQuery.deferred__を使用して、.get()のコールバックで追加のコールバックを使用できます。 –

関連する問題