amazonAPIから帰ってきた配列data.Items.Item部分の要素数を知りたいのですがどのように書けばいいですか?
jsonデータサンプルは以下URLにUPしています。
http://neoregi.com/sample/ItemSearch.txt
ちなみに、サンプルではdata.Items.Item部分の要素数は10個です。
捕捉に記してあるコードでは一応希望通り表示されますが、方々でエラーが出ますので要素数を数えてforのカウンターにセットした方がいいのかなと考えました。
他にもダメな部分があったら教えていただければ幸いです。
よろしくお願いします。
$.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); });
戻りは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); });
戻りは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); });
ご回答ありがとうございます。
jsonでなくxmlでした。勘違いしていました。
配列要素数は無事取得できました。
ありがとうございます。
あと一か所問題が出ました。
そもそも"MediumImage"が存在しない要素もあるみたいです。
xmlサンプルのdata.Items.Item添え字5のデータがそうです。
存在していないデータをifで問うとerrorで処理が中断するようです。
存在しているか?という書き方があったらご教授いただけないでしょうか?
何度も申し訳ありません。
検索してもなかなか思う解答にたどり着かず困っています。
そもそも"MediumImage"が存在しない要素もあるみたいです。
表示する画像が無かったときに、どう表示するか、という方法にもよりますけれど、「?」みたいな画像を用意しておいて、それへの URL が NO_IMAGE_URL という変数に入れておいたとした場合、こんな感じになると思います(★★をつけたあたり)。
$.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); });
ご回答ありがとうございます。
2015/06/24 20:40:20jsonでなくxmlでした。勘違いしていました。
配列要素数は無事取得できました。
ありがとうございます。
あと一か所問題が出ました。
そもそも"MediumImage"が存在しない要素もあるみたいです。
xmlサンプルのdata.Items.Item添え字5のデータがそうです。
存在していないデータをifで問うとerrorで処理が中断するようです。
存在しているか?という書き方があったらご教授いただけないでしょうか?
何度も申し訳ありません。
検索してもなかなか思う解答にたどり着かず困っています。
表示する画像が無かったときに、どう表示するか、という方法にもよりますけれど、「?」みたいな画像を用意しておいて、それへの URL が NO_IMAGE_URL という変数に入れておいたとした場合、こんな感じになると思います(★★をつけたあたり)。
2015/06/24 21:45:37