javascript(jquery)でyahooショッピングAPIからデータを取得&表示するサンプルを作成しています。
データはjsonp形式で取得しhtmlに整形して出力するのですが、一部のデータだけ取得できずエラーになってしまいます。
■エラー内容
Uncaught TypeError: Cannot read property 'Medium' of undefined
■yahooショッピングAPIの仕様
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
■作成したソース
var url = yahooショッピングAPIへのリクエストURL
$.getJSON(url , function(data, status){
var item = data.ResultSet[0].Result;
for (var i in item) {
//↓breakpointを設定しこの時点の値を見るとちゃんと値は入っています。
var test = item[i].Image.Medium;
arr_ya_shop.push([
item[i].Name,
item[i].Url,
item[i].Price,
//↓ここで「Medium」がエラーになる。
item[i].Image.Medium
]);
}
〜arr_ya_shopに格納した値の処理〜
});
原因を教えていただけたら幸いです。
for (var i in item) {
これが原因ですね。
for in はすべてのプロパティを拾うので想定していないことになってると思います。ループを追っていくと i には Result などの値も入っており、item['Result'].Image は undefined なのでエラーになっていると思います。
作成したソースの下の部分を変更してみてください。
var item = data.ResultSet[0].Result;
↓
var item = data.ResultSet[0].Result.Hit;
ご回答ありがとうございます。
下記に記載されているレスポンスフィールドをご確認頂きアドバイスをして頂けたかと思います。
> ■yahooショッピングAPIの仕様
> http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
私も当初は.Hitを入れていたのですがデータが取得できず、実際のレスポンスフィールドを確認したところHitは不要でした。
そういうことになると思います。
2014/03/24 09:44:35仕様を見ると、totalResultsAvailable:検索数HIT数 という値が返ってくるようなので、それを使ってループさせればいいかと思います。
あ、違いますね。totalResultsReturned:返された値の個数 の方でした。
2014/03/24 09:45:14