我认为这是非常容易和过度记录的,但我已经连续几个小时在这里,我只是不明白!我想要做的就是返回$ .getJSON查询的结果。如果我将它附加到div等,它工作正常,但如果我试图得到结果,我可以在回调函数中提醒它,但不能在其他任何地方。我想我的代码将显示我想要做的事情:
var thumb =
$.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?',
function(data) {
alert(data); //shows the result perfect!
var thumb = data;
return thumb;
});
alert(thumb); //undefined
如果看起来像是一个如此愚蠢的问题,请提前抱歉,但我无法得到它:(
非常感谢你的时间,
elshae
修改 梅德和大卫都给了我很好的答案。我想把它们都标记为我的答案,但似乎我只能选择一个: - /。任何有这个问题的人,请看两个答案:)
答案 0 :(得分:3)
Ajax是异步的。而不是依赖thumb
只需在回调中调用函数并执行相同的功能。
var thumb = data;
anotherFunction( thumb );
否则,如果坚持这个结构,指定async:false
虽然这会杀死Ajax的全部好处。
答案 1 :(得分:2)
您已经做了几次不同的尝试来获取数据,但是由于不同的原因它们会失败。我会在一瞬间解释原因,首先是解决方案:
无论您如何处理数据都必须在回调函数中完成。
现在,为什么你的尝试不起作用:
您无法从Ajax请求返回数据。
Ajax通常通过创建XHR对象,为“当请求返回时”设置事件处理程序,然后发送HTTP请求来工作。
您无法从中返回数据,原因与您无法从以下位置返回事件对象的原因相同:
var not_the_event = jQuery('foo').click(function (event) { return event; });
您无法设置名为thumb
的变量的值,并使用thumb
关键字在定义var
的函数内部定义函数外部。 var
关键字创建一个范围为函数的变量的新实例。
如果你将var
从回调函数中移开,它仍然无效,因为你会遇到时间问题。
如果你有:
var not_the_event;
jQuery('foo').click(function (event) { not_the_event = event; });
alert(not_the_event);
然后你会警告undefined
因为在调用alert
时没有发生点击,所以事件处理函数没有设置变量。
使用Ajax时,到达警报时尚未回复HTTP请求,因此它也未定义。
这让我们回到:无论你如何处理数据都必须在回调函数中完成。
回调函数的要点是在数据就绪时调用它。因此,无论您如何处理数据都可以。
答案 2 :(得分:0)
您在本地定义它,如果您希望它全局工作,请全局定义:
var thumb = {};
$.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?',
function(data) {
alert(data); //shows the result perfect!
thumb = data;
});
alert(thumb);
虽然正如其他人发布的那样,最好让回调将其传递给另一个函数,因为依赖全局变量是一种不好的做法。并且在ajax完成之前会触发警报。
答案 3 :(得分:-1)
首先,不要在内部范围内定义具有相同名称的第二个变量:)
关于您的问题,在调用'$ .getJSON'之前添加以下行:
$ .ajaxSetup({async:false});