function json (url){
$.getJSON(url, function(data) {
return data;
})
}
此功能看不到“数据”
function MakeAlert(){
data = json('action.php');
window.alert(data.name);
}
这项工作:
function json (url){
$.getJSON(url, function(data) {
window.alert(data.name);
})
}
答案 0 :(得分:2)
那是因为$.getJSON
是异步的。它发送请求并立即返回。一旦服务器响应(可能是几秒钟后),它就会调用success
回调,这就是为什么data
只能在此回调中访问。
如果你想阻止调用者,你可以发送一个同步请求(请注意,这可能会在请求执行时冻结UI,这会破坏AJAX的全部目的):
function json(url) {
var result = null;
$.ajax({
url: url,
async: false,
dataType: 'json',
success: function(data) {
result = data;
}
});
return result;
}
答案 1 :(得分:1)
function json (url){
$.getJSON(url, function(data) {
return data;
})
}
您无法在此处使用return
。您将data
返回匿名闭包函数。
最好的方法是使用callback function
,getJSON
执行成功处理程序时应该应用{。}}。
function json (url, cb){
$.getJSON(url, function(data) {
cb.apply(null, [data]);
})
}
<强>使用强>
json('action.php', function(data){
alert(data);
});