jQueryの配列に関する質問です。

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

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

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2015/06/25 02:21:33
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:wsapp

質問者から

wsapp2015/06/24 16:35:41
$.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);
});

ベストアンサー

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154

ポイント100pt

戻りは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);
});
id:wsapp

ご回答ありがとうございます。
jsonでなくxmlでした。勘違いしていました。
配列要素数は無事取得できました。
ありがとうございます。

あと一か所問題が出ました。
そもそも"MediumImage"が存在しない要素もあるみたいです。
xmlサンプルのdata.Items.Item添え字5のデータがそうです。
存在していないデータをifで問うとerrorで処理が中断するようです。
存在しているか?という書き方があったらご教授いただけないでしょうか?

何度も申し訳ありません。
検索してもなかなか思う解答にたどり着かず困っています。

2015/06/24 20:40:20
id:a-kuma3

そもそも"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 21:45:37

その他の回答0件)

id:wsapp

質問者から

wsapp2015/06/24 16:12:53

質問文を編集しました。詳細はこちら

id:a-kuma3 No.1

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント100pt

戻りは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);
});
id:wsapp

ご回答ありがとうございます。
jsonでなくxmlでした。勘違いしていました。
配列要素数は無事取得できました。
ありがとうございます。

あと一か所問題が出ました。
そもそも"MediumImage"が存在しない要素もあるみたいです。
xmlサンプルのdata.Items.Item添え字5のデータがそうです。
存在していないデータをifで問うとerrorで処理が中断するようです。
存在しているか?という書き方があったらご教授いただけないでしょうか?

何度も申し訳ありません。
検索してもなかなか思う解答にたどり着かず困っています。

2015/06/24 20:40:20
id:a-kuma3

そもそも"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 21:45:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません