人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

jQueryの配列に関する質問です。
amazonAPIから帰ってきた配列data.Items.Item部分の要素数を知りたいのですがどのように書けばいいですか?
jsonデータサンプルは以下URLにUPしています。
http://neoregi.com/sample/ItemSearch.txt
ちなみに、サンプルではdata.Items.Item部分の要素数は10個です。

捕捉に記してあるコードでは一応希望通り表示されますが、方々でエラーが出ますので要素数を数えてforのカウンターにセットした方がいいのかなと考えました。
他にもダメな部分があったら教えていただければ幸いです。
よろしくお願いします。

●質問者: wsapp
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から
$.ajax({
...
})
.done(function(data){
 item_position = data.Items.Item;
 $('#content').empty();
 for(var i = 0; i < 20; i++){
 if(item_position[i]){
 var item_defaultimg = $('<img>').attr('src', item_position[i].MediumImage.URL);
 $('#content').append('<p>' + item_position[i].ItemAttributes.Title).append(item_defaultimg);
 }
 for(var j = 0; j < 10; j++){
 if(item_position[i].ImageSets.ImageSet[j]){
 var item_setimg = $('<img>').attr('src', item_position[i].ImageSets.ImageSet[j].SmallImage.URL);
 $('#content').append(item_setimg);
 }
 }
 }
})
.fail(function(data){
 console.dir(data);
});

1 ● a-kuma3
●100ポイント ベストアンサー

戻りはJSON ですか? XML ではなく?
どちらも要素数は length プロパティで取得できますが。
とりあえず、data.Items.Item と data.Items.Item.ImageSets.ImageSet の要素数で for を回した方が良いですね。

$.ajax({
...
})
.done(function(data){
 item_position = data.Items.Item;
 $('#content').empty();
 for(var i = 0; i < item_position.length; i++){ // ★ここ
 if(item_position[i]){
 var item_defaultimg = $('<img>').attr('src', item_position[i].MediumImage.URL);
 $('#content').append('<p>' + item_position[i].ItemAttributes.Title).append(item_defaultimg);
 }
 for(var j = 0; j < item_position[i].ImageSets.ImageSet.length; j++){ // ★ここ
 if(item_position[i].ImageSets.ImageSet[j]){
 var item_setimg = $('<img>').attr('src', item_position[i].ImageSets.ImageSet[j].SmallImage.URL);
 $('#content').append(item_setimg);
 }
 }
 }
})
.fail(function(data){
 console.dir(data);
});

wsappさんのコメント
ご回答ありがとうございます。 jsonでなくxmlでした。勘違いしていました。 配列要素数は無事取得できました。 ありがとうございます。 あと一か所問題が出ました。 そもそも"MediumImage"が存在しない要素もあるみたいです。 xmlサンプルのdata.Items.Item添え字5のデータがそうです。 存在していないデータをifで問うとerrorで処理が中断するようです。 存在しているか?という書き方があったらご教授いただけないでしょうか? 何度も申し訳ありません。 検索してもなかなか思う解答にたどり着かず困っています。

a-kuma3さんのコメント
>> そもそも"MediumImage"が存在しない要素もあるみたいです。 << 表示する画像が無かったときに、どう表示するか、という方法にもよりますけれど、「?」みたいな画像を用意しておいて、それへの URL が NO_IMAGE_URL という変数に入れておいたとした場合、こんな感じになると思います(★★をつけたあたり)。 >|javascript| $.ajax({ ... }) .done(function(data){ item_position = data.Items.Item; $('#content').empty(); for(var i = 0; i < item_position.length; i++){ // ★ここ if(item_position[i]){ // ★★ここから var item_defaultimg = $('<img>').attr('src', NO_IMAGE_URL); if (item_position[i].MediumImage) { item_defaultimg = $('<img>').attr('src', item_position[i].MediumImage.URL); } // ★★ここまで $('#content').append('<p>' + item_position[i].ItemAttributes.Title).append(item_defaultimg); } for(var j = 0; j < item_position[i].ImageSets.ImageSet.length; j++){ // ★ここ if(item_position[i].ImageSets.ImageSet[j]){ var item_setimg = $('<img>').attr('src', item_position[i].ImageSets.ImageSet[j].SmallImage.URL); $('#content').append(item_setimg); } } } }) .fail(function(data){ console.dir(data); }); ||<
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ