【问题标题】:JQuery undefined responseJQuery 未定义的响应
【发布时间】:2010-11-09 03:24:15
【问题描述】:

我认为这很容易而且文档过多,但我已经连续几个小时都在做这个,我就是不明白!我要做的就是返回 $.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

如果这似乎是一个愚蠢的问题,请提前抱歉,但我无法得到它:(

非常感谢您的宝贵时间,

艾尔莎

编辑 Meder 和 David 都给了我很好的答案。我想将两者都标记为我的答案,但似乎我只能选择一个:-/。任何有这个问题的人,请看两个答案:)

【问题讨论】:

  • 您也可以发布您的答案吗?

标签: javascript jquery ajax getjson


【解决方案1】:

Ajax 是异步的。无需依赖thumb,只需在回调中调用一个函数并执行相同的功能即可。

var thumb = data;
anotherFunction( thumb );

否则,如果坚持使用此结构,请指定 async:false,尽管这会扼杀 Ajax 的全部优势。

【讨论】:

  • var thumb = $.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?', function(data) {var thumb = data; function (thumb){return thumb;}}); 我不确定你的意思...但我试过这个...导致错误:(“做同样的功能”抱歉不知道这是什么意思...
  • 创建一个使用thumb 变量的外部函数,并在你拥有的变量中调用它。
【解决方案2】:

您已经进行了几次不同的尝试来获取此处的数据,但由于不同的原因都失败了。不过,我会先解释一下原因——解决方案:

无论你对数据做什么,都必须在回调函数中完成。

现在,为什么你的尝试不起作用:

您不能从 Ajax 请求返回数据。

Ajax(通常)通过创建 XHR 对象、为“当请求返回时”设置事件处理程序、然后发送 HTTP 请求来工作。

您无法从它返回数据,原因与您无法从以下位置获取事件对象返回的原因相同:

var not_the_event = jQuery('foo').click(function (event) { return event; });

您不能设置名为thumb 并在函数外部定义的变量的值,该变量在使用var 关键字定义thumb 的函数内部。 var 关键字创建一个作用域为函数的变量的新实例。

如果您将var 从回调函数中取出,它仍然无法工作,因为您会遇到时间问题。

如果你有:

var not_the_event;
jQuery('foo').click(function (event) { not_the_event = event; });
alert(not_the_event);

那么你会警告undefined,因为在调用alert时没有发生点击,所以事件处理函数没有设置变量。

使用 Ajax,到达警报时 HTTP 请求尚未得到响应,因此它也是未定义的。

这让我们回到:无论您对数据做什么,都必须在回调函数中完成。

回调函数的重点在于数据准备好时调用。所以你对数据做的任何事情都可以完成。

【讨论】:

  • 我真的很喜欢这个答案!但是,我仍然无法让它工作。现在我尝试了:var icon; $.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?', function(data) {icon = new OpenLayers.Icon(data);}); alert(icon); //still undefined,我也尝试了:var icon = $.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?', function(data) {var icon = new OpenLayers.Icon(data); return icon;}); alert(icon); //also undefined :(
  • 由于同样的原因失败了。你有一些东西在请求发出后立即运行,这些数据依赖于在响应返回之前不存在的数据。您刚刚在回调中移动了依赖于该数据的 first 事物。你需要那里的一切
  • 对不起,也许是某种例子?我想我只是不明白......因为它仍然不起作用:(
  • jQuery.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?', function(data) {var icon = new OpenLayers.Icon(data); alert(icon) });
  • 没有调用不同的函数并将数据传递给它,没有办法将数据取出。因此“无论你对数据做什么,都必须在回调函数中完成。”
【解决方案3】:

您在本地定义它,如果您希望它在全局范围内工作,请在全局范围内定义它:

var thumb = {};
$.getJSON('http://localhost/mapScripts/getThumbs.php?thumbnails=?',
function(data) { 
alert(data); //shows the result perfect!
thumb = data; 

});

alert(thumb);

尽管正如其他人所发布的那样,最好让回调将其传递给另一个函数,因为依赖全局变量是一种不好的做法。并且警报会在 ajax 完成之前触发。

【讨论】:

  • 嗯,它肯定比我以前的更接近了......现在我得到了[object object] :(。但非常感谢您指出这一点:)
【解决方案4】:

首先不要在内部范围内定义同名的第二个变量:)

关于您的问题,在调用“$.getJSON”之前添加以下行:
$.ajaxSetup({ async: false });

【讨论】:

  • 我宁愿不使用$.ajaxSetup({ async: false });,但我感谢您的深思熟虑的反馈,是的,我犯了这样的错误:p
猜你喜欢
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 2021-06-21
  • 2021-05-26
  • 2019-01-20
  • 2021-10-28
  • 2014-12-30
相关资源
最近更新 更多