JQuery未定义的响应

时间:2010-11-05 20:16:31

标签: javascript jquery ajax getjson

我认为这是非常容易和过度记录的,但我已经连续几个小时在这里,我只是不明白!我想要做的就是返回$ .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

修改 梅德和大卫都给了我很好的答案。我想把它们都标记为我的答案,但似乎我只能选择一个: - /。任何有这个问题的人,请看两个答案:)

4 个答案:

答案 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});