ajax リクエストが非同期であるため、機能していません。alert を使用すると、値が返されるまでのタイムアウトがあります。追加することでスクリプトを機能させることができます(同期リクエストを作成できないasync: false
クロスドメインリクエストに注意してjsonp
ください!)が、リクエストの準備が整うまでJSがブロックするため、実際にはお勧めしません。より良いアプローチは、コールバックを使用することです:
function getTotalPages(callback) {
var valuePage;
$.getJSON('Data/product.json').
done(function(data) {
$.each(data, function(key, value) {
if (typeof callback === 'function') {
callback(value);
}
});
});
}
非同期リクエストを使用してこれを行う方法の例を次に示します。
function getResult(callback) {
var url = 'https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=mgechev&count=3';
$.ajax({
url: url,
success: function (data) {
if (typeof callback === 'function') {
callback(data);
}
},
dataType: 'jsonp'
});
}
getResult(function (data) {
var variable = data;
alert(variable);
});
JSFiddle: http://jsfiddle.net/vWnHJ/
この例では、関数に関数を渡しgetResult
、リクエストから受け取ったデータで指定された関数を呼び出します。