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

标签 javascript jquery

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

我在 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/

相关文章:

javascript - 当前行的 ng-hide 和 ng-show

javascript - 在发送 JavaScript 之前拦截 XHR 并更改请求 header 和 url

javascript - 有没有一种简单的方法来判断 json 对象是否包含属性?

jquery - 外部内容加载导致 div 无法扩展到页面底部

javascript - 2 个列表,如果列表 1 的元素 x 具有类 y,则将类添加到第二个列表的 x 元素

jquery - CSS transform-origin 以错误的方式移动原点

javascript - Laravel中如何实现jquery get函数

javascript - SoundCloud 流 API 为某些 URL 提供 401 和 403 错误

javascript - 将事件 anchor 类链接到页面部分

javascript - jquery ui 自动完成结果不显示在 html 下拉列表中