【问题标题】:Javascript Dot Notation = UndefinedJavascript点符号=未定义
【发布时间】:2016-03-08 15:25:13
【问题描述】:

点表示法允许使用 '.' 访问对象无法弄清楚为什么会这样。作为 jQuery $.ajax 函数的一部分,我有以下成功函数。

success: function(data){
  console.log('data = ' + data);
  console.log('data.president = ' + data.president);
  console.log('data.adviser = ' + data.adviser);
}

奇怪的是,这会导致以下浏览器日志:

data = {"president":1,"adviser":1}
data.president = undefined
data.adviser = undefined

我一定错过了一些非常明显的东西。有人可以启发我吗?

【问题讨论】:

  • 我建议在console.log 中使用逗号而不是字符串连接。比如看console.log('data = ' + {})console.log('data = ', {})的区别
  • data 是一个字符串。关键是控制台省略了 " 在它的边缘,使它类似于一个对象,但事实并非如此。它是对象的 JSON 序列化。尝试将 dataType: 'json' 添加到 ajax 请求以将其转换自动到js对象。
  • @Stryner 很有趣。你能详细说明为什么逗号更可取吗?我跑了:连接返回data = [object Object],逗号返回data = Object {}
  • 逗号更可取,因为它们保留了正在记录的对象的类型。使用字符串连接,所有对象都将更改为[object Type],从而减少了信息量。在我使用的控制台(Firefox 的 Firebug)中,我能够检查记录的对象;我不确定这是否普遍。
  • @Stryner 非常有帮助,感谢您提供的信息。谢谢!!

标签: javascript jquery ajax syntax


【解决方案1】:

数据必须是一个对象,才能通过点 . 访问。 现在是一个字符串。 您需要使用例如解析它:

data = JSON.parse(data);

【讨论】:

  • 不过,理想情况下,服务器会为响应设置正确的 MIME 类型,而 jQuery 会自动将响应解析为 JSON。或者正如 A. Wolff 刚刚指出的那样,使用 dataType: "json"
  • 没有JSON对象,JSON是对象的表示法,这里是javascript一个
  • 德普。就像我说的,非常明显。很好的呼吁,同时也向 A. Wolff 和 Peter 致敬 dataType/MIME 类型。这确实是我在 AJAX 调用中所缺少的。感谢帮助,伙计们!
【解决方案2】:

dataType: "json" 设置为 ajax 选项,以便 jQuery 将您的字符串 data 解析为 javascript 对象

【讨论】:

    【解决方案3】:

    你定义的data元素有strings,对象的属性需要声明不带引号,像这样:

    data = {president:1,adviser:1}
    

    在这种情况下,你得到了预期的结果

    data.president = 1
    data.adviser = 1
    

    【讨论】:

      猜你喜欢
      • 2018-02-13
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 2012-11-07
      • 2012-09-05
      • 2017-06-25
      • 2018-06-19
      相关资源
      最近更新 更多