jQueryでXMLを読むときhtml()を使うとsafariでエラー
■ 環境
jquery-1.10.1
Safari-5.1.7
初めはiPhoneでエラーになるのかと思ったが,調べていくとOSは関係なくsafariのみで起きる事象みたい。chromeではエラーは起きないでsafariだけエラーが起きるなんて珍しいなーと思ったのでメモ。
例えば以下のようなXMLが用意してあって,/getxml.phpにアクセスするとXMLが取得できるとする。
ABC0001 ABC0002 ABC0003
次にJSで以下の様にしてproductCodeを順番にコンソールに出力する。
$.ajax({ url: '/getxml.php', dataType: 'xml', success: function(xml_data){ $(xml_data).find('productDetail').each(function(i){ console.log($('productCode', this).html()); }); } });
以上の書き方だとsafariだけエラーが出る。エラーメッセージはこんな感じ。
TypeError: 'undefined' is not an object (evaluating 'n.innerHTML.replace')
どうも$(‘productCode’, this).html()が良くないみたい。
いつもあまり気にせずhtml()を使っていたがtext()に変えてみたらsafariでもうまく動いた。
$.ajax({ url: '/getxml.php', dataType: 'xml', success: function(xml_data){ $(xml_data).find('productDetail').each(function(i){ console.log($('productCode', this).text()); }); } });
今後はtext()も頭に入れておこう。。。