東條君に質問されて、その場ではうまくいかなかったので、ここにメモしておきます。
§9-2にある例をバスマップのxmlデータの処理用に書き直したプログラムです。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> <script type="text/javascript" src="jquery-1.10.1.min.js"></script> <script type="text/javascript"> <!-- $(document).ready(function () { $.ajax({ url: 'BusCategorizedRouteXml.xml', type: 'GET', //cache: false,//キャッシュを行う場合はtrue dataType: 'xml', timeout: 5000, success: function (data) { $(data).find("item").each( function(){ $('#result').append( $('<li></li>').append($(this).attr("name"))); } ); } }); }); /* やっていること: * ajaxでurlで指定したものをリクエスト、 * getできたら、successに指定した関数を実行 * 関数では * データからitemというタグを探し(find)、 * ひとつひとつ(each) <li>タグをつけて、bodyのresult部分に書きだす * をことを行なっている。 */ //--> </script> </head> <body> <ul id="result"></ul> </body> </html>
テキストのyahooJquery.htmlにあるDOMの表現(data.Result[i].Titleのような)はjQuery内の関数ではうまく動かないようです。jQueryらしくyahooJquery2.htmlにあるようにfind(), each()関数はうまく動作します。
なお、jQueryの1.6以降(くらい)では、$.ajaxよりも$.get関数をもちいることが一般的なようです。(よりスマートに書けます。)
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> <script type="text/javascript" src="jquery-1.10.1.min.js"></script> <script type="text/javascript"> <!-- $(document).ready(function () { $.get('BusCategorizedRouteXml.xml', function(data) { $(data).find("item").each(function() { $('#result').append( $('<li></li>').append($(this).attr("name"))); }); }); }); //--> </script> </head> <body> <ul id="result"></ul> </body> </html>