gpt4 book ai didi

从 Chrome 开发工具中可用的函数返回的 JavaScript 对象,但不是从脚本返回的

转载 作者:搜寻专家 更新时间:2023-11-01 04:27:23 26 4
gpt4 key购买 nike

编辑

我在那里有点快,问题出现在函数中而不是我第一次说的地方。这是函数:

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 调用开始后立即返回(并且在它完成并成功之前很久)。你可能不相信,但这是我今天第四次回答完全相同类型的问题。这是一个很常见的错误。由于内联成功处理程序,看起来这一切都发生在 main 函数内部,但实际上它发生在该函数完成很久之后。

在调用成功处理程序之前,您不能使用 ajax 调用的返回结果。如果您想将该结果传递给后续代码,则必须从成功处理程序调用该后续代码,而不是在 returnAnObject 函数调用后继续它。

它在开发工具中有效,因为 ajax 调用在您向开发工具中键入任何内容或查看时完成。但是,info.a 在 returnAnObject 函数的末尾不可用。它仅在调用 ajax 函数的成功处理程序时可用。

关于从 Chrome 开发工具中可用的函数返回的 JavaScript 对象,但不是从脚本返回的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com