javascript(jQuery)を使って、リクエスト&帰ってきたデータの整形をしたいのですが、うまく取得できません。
原因を教えて頂ければと思います。
■javascript
//表示件数
var max_count = 10;
//URL ※楽天アプリIDは置き換え
var url = "https://app.rakuten.co.jp/services/api/AuctionItem/Search/20130110?applicationId=楽天アプリID&format=json&sort=%2BitemPrice&keyword=";
jQuery(document).ready(function($){
$("#search_box").on('keypress', function(e) {
if(e.which == 13) {
$("#result_list ul").empty();
var key = encodeURI($(this).val());
var url_ra = url + key;
var arr_ra = [];
$.ajax(
url_ra,
{
crossDomain: true,
dataType: 'jsonp',
success: function(data) {
var item = data.Items.Item;
for (var i in item) {
arr_ra.push([
item[i].itemName,
item[i].itemPrice
]);
}
},
error: function() {
alert("エラー");
}
}
);
for(var j = 0; j < max_count; j++) {
$("#result_list ul").append('<li>' + arr_ra[j][0] + ':' + arr_ra[j][1] + '</li>');
}
}
});
});
■html
<div id="search_box"><input type="text" /></div>
<div id="result_list">
<ul>
</ul>
</div>
for(var j = 0; j < max_count; j++) { $("#result_list ul").append('<li>' + arr_ra[j][0] + ':' + arr_ra[j][1] + '</li>'); }
エラーはここで起こっていますよね?
これの位置が $.ajax() の後にありますが、このfor文の意図はデータ取得時に取得内容を表示するというものですよね?
ならばsuccess内で行うべきです。
今の位置だとajax登録後、取得前なので arr_ra は空の配列で[0]はundefinedなのでarr_ra[0][0]はエラーになります。
ajaxでのデータ取得はスクリプトが一旦終了し、ブラウザに制御が戻った後となります。
補足です。
エラー内容は「Cannot read property '0' of undefined」となっています。
また、楽天APIの仕様は以下になります。