我已在.js文件中声明此函数并在.html文件中调用它。
function getTotalPages() {
var valuePage;
$.getJSON('Data/product.json').
done(function(data) {
$.each(data, function(key, value) {
valuePage=value;
});
});
//alert('out');
return valuePage;
}
上面的函数返回“undefined”而没有“alert”,警告它正常工作。任何人都可以帮助我。
谢谢 提前。
答案 0 :(得分:4)
此问题已被回答了一千次。它是关于'无法从异步请求中返回任何值'。你应该在valuePage
回调中做done
所要做的一切。
答案 1 :(得分:2)
它无效,因为您的ajax请求是异步的。
通过警报,您将超时,然后返回值。您可以通过添加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
函数,并使用从请求接收的数据调用给定函数。
答案 2 :(得分:1)
AJAX是异步的,当你关闭警报消息时,返回的值将被解析,但没有警报就太早了。您可以发出同步请求或使用回调。