gpt4 book ai didi

用奇怪的值初始化的 Javascript 对象

转载 作者:行者123 更新时间:2023-11-30 13:18:23 31 4
gpt4 key购买 nike

我一整天都在尝试调试它,但它完全令人困惑。寻找一些提示。

我在 javascript 命名空间中有这些函数:

var ZZ = {
bar: function(data) {
console.log(data);
},
foo: function() {
$.ajax({
'url':'/test',
'type':'GET',
'dataType':'jsonp',
'success':function(ret_json, status) {
console.log(ret_json); // SUCCESS_1
console.log(ret_json[1].title); //SUCCESS_2
bar(ret_json);
}
});
},
...
}

所以我查看了开发人员工具的“网络”选项卡,返回的 json 是正确的。类似于:

[{'id':1, 'url':'http://a.com', 'title':'hi'}, {'id':2, 'url':'http://b.com', 'title':'hi2'}]

现在我查看控制台并在 SUCCESS_1 看到它打印出如下内容:

[{'id':1, 'url':'http://c.com', 'title':'hi3'}, {'id':2, 'url':'http://c.com', 'title':'hi3'}]

如您所见,id 是正确的,但 url 和 title 不正确。 (我也可以更改数据库中的id,它们将被正确携带)

然后是 SUCCESS_2 的下一行,它获取了正确的标题! 'hi2'

接下来我将调试器语句放入成功函数中:ret_json 看起来完全正确,但是当我进入 bar() 函数时......数据看起来又错了。

接下来我补充:

var hi = {};
console.log(hi);

进入成功函数..它打印出来..(不是开玩笑)

{'url':'http://c.com', 'title':'hi3'}

所以基本上,这个“默认”会覆盖实际存在的任何内容。

我已经在 ajax 调用中添加了 cache:false,我已经尝试过 json 和 jsonp,我已经尝试过清除缓存,我已经尝试过使用 chrome/safari/firefox..但是没有做任何事情,我怀疑这是什么很明显……真的很兴奋。

关于我可以尝试的任何其他想法?


更新:将此命名空间添加到不同的 html 页面。最令人震惊的例子

var hi = {}
console.log(hi)

打印的东西不见了但是 ret_json 数据错误的原始问题仍然存在。(我仍然无法访问以前 html 页面的工作版本)

最佳答案

@ggez44,这是因为 console.log 不是 Chrome/Firefox/Safari 中的同步调用。通常会有几毫秒的延迟。

It looks on my machine the delay is not constant, and is between 4ms and 16ms in Chrome, and about 2ms in Safari.

http://techblog.appnexus.com/2011/webkit-chrome-safari-console-log-bug/

Bizarre console.log behaviour in Chrome Developer Tools

我对此的推测解决方案是执行类似“console.log(a.toJSON());”的操作。然后你得到一个指向传入的字符串对象的指针,它与原始对象无关。

更新:显然这是一个“特性,而不是错误”。在 webkit 邮件列表中有一些相当不错的门票链接。 Why does javascript object show different values in console in Chrome, Firefox, Safari?

关于用奇怪的值初始化的 Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11195825/

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