JavaScript对象从Chrome开发工具中可用的函数返回,但不是从脚本返回
JavaScript object returned from function available in Chrome Dev Tools, but not from script
编辑
我在那里有点快,问题出现在函数中,而不是我第一次说的地方。以下是功能:
function returnAnObject(url) {
var apiurl = 'http://url.com';
var info = {};
$.getJSON(apiurl, function(data) {
$.extend(info, {
a : data.x,
b : data.y,
c : data.z
});
});
console.log(info); // Shows object as usual
console.log(info.a); // Shows undefined
return info;
}
这样会更清楚吗?
结束编辑
好吧,我有一个小问题。
我有一个函数,它返回一个相当简单的对象,看起来像这样:
{
a: 'x',
b: 'y',
c: 'z'
}
我把它保存到这样一个变量中:
var something = functionThatReturnsObject(someargument);
console.log(something); // In chrome dev tools, I see the object and its values
console.log(something.a); // This, however, logs undefined
console.log(something['a']); // This also logs undefined
为什么会这样?我想我在这里快要疯了,我一定是忽略了什么。。。
如果不是,就会发生真正奇怪的部分
var something = functionThatReturnsObject(someargument);
我写
window.something = functionThatReturnsObject(someargument);
console.log(something); // Still works, showing the object and properties
console.log(something.a); // Still doesn't work
console.log(someting['a']); // Still doesn't work
如果我现在直接从开发工具访问对象,输入
something; // returns object, I can see everything in it etc.
something.a // Now, for some mysterious (to me) reason, this works, returning the value of a
那么,有人明白这里发生了什么吗?
正如我所怀疑的那样。您正在为异步函数调用的成功处理程序中分配信息。成功处理程序直到ajax调用完成后才执行,但您的函数在ajax调用开始后立即返回(并且在它完成并成功之前很久(。你可能不相信,但这是我今天第四次回答完全相同的问题。这是一个很常见的错误。由于内联成功处理程序,这一切似乎都发生在主函数内部,但实际上它发生在该函数完成很久之后。
在调用成功处理程序之前,您不能使用ajax调用的返回结果。如果要将结果传递给后续代码,则必须从成功处理程序中调用该后续代码,而不是在returnAnObject函数调用后继续。
它在开发工具中起作用,因为ajax调用在您向开发工具中键入任何内容或查看时完成。但是,info.a在returnAnObject函数的末尾不可用。只有当调用ajax函数的成功处理程序时,它才可用。
相关文章:
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- 如果返回的数据是javascript,$.ajax会自动执行脚本吗
- Jquery:对返回JSON数据的php脚本的Ajax调用
- 通过浏览器加载页面时触发加载脚本(js或jQuery)'s”;返回“;作用
- 如何在弹出脚本到内容脚本之间发送消息并返回
- jQuery DataTable返回带有数据的PHP脚本
- 返回PartialView时在脚本中使用TempData
- 在Perl CGI脚本中捕获iframe返回值
- 动态添加的输入元素不会在脚本中返回值
- 使用 jQuery 从运行 MySQL 的 PHP 脚本返回信息
- Google Apps 脚本在单元格中返回行值
- 如何在 Google 应用脚本中 sendEmail 函数的范围内的唯一非空白列中返回值
- 为什么&此脚本返回的位置未定义
- 谷歌脚本在第二次调用Gmail后返回null
- jQuery AJAX调用PHP脚本并返回字符串
- 使用jquery ajax访问php脚本返回的JSON
- HTML和perl,返回脚本文本而不是运行
- Window.resize()函数并返回脚本执行的事实
- xmlhttp.responseText返回脚本标记的内容
- 问题,在HTML中返回脚本,需要第三'“