【问题标题】:$.each throwing error : Cannot use 'in' operator to search for '37' in$.each 抛出错误:不能使用 'in' 运算符搜索 '37' in
【发布时间】:2016-06-29 14:46:18
【问题描述】:

我有一个 JSON 对象,如下所示:

var data = "{'key1' : 'value1', 'key2' : 'value2'}";

因为它是 JSON 格式,所以不需要解析,所以我只想使用 $.each 来迭代对象,如下所示:

 $.each(data, function(index, value) {
   alert(index + ": " + value);
 });

它抛出一个控制台错误

 Uncaught TypeError: Cannot use 'in' operator to search for '37' in {'key1' : 'value1', 'key2' : 'value2'}(…)

我不知道出了什么问题。这是什么?

【问题讨论】:

  • 数据是字符串,事件不是有效的 JSON
  • @Pranav 你能详细说明一下吗?
  • $.each 可以申请一个对象或一个数组...但是你使用的是一个字符串,要么创建一个对象,要么创建一个有效的 json 并解析
  • “因为是 JSON 格式,所以不需要解析” 完全不对。 JSON 必须被解析为原生 JavaScript 值。现在你有一个字符串(甚至不包含 JSON)。你不能在字符串上使用$.each

标签: javascript jquery json


【解决方案1】:

您只需将赋值给数据变量的方式更改为如下所示:

var data = {key1 : 'value1', key2 : 'value2'};

代替

var data = "{'key1' : 'value1', 'key2' : 'value2'}";

【讨论】:

  • 解释差异可能会有所帮助。
  • 以前的数据以字符串格式分配。所以需要从 start 和 end 中删除 " 以使其成为对象。并且 key 没有任何类型,因此不需要用 ' 包装 key。因此在进行这些更改后将是具有多个键值对的适当对象。
【解决方案2】:

这不是一个有效的 json。从而引发错误。

$(document).ready(function() {

  var data = {};
  data.key1 = "value1";
  data.key2 = "value2";

  $.each(data, function(index, value) {
      alert(index + ": " + value);
      });
 });

演示:https://jsfiddle.net/0d7st5q7/

【讨论】:

  • data = "{'key1' : 'value1', 'key2' : 'value2'}" 错了吗?
  • 必须使用 dom 元素的数据属性设置数据变量
  • 是的,因为它被视为字符串,如果您尝试转换 json 对象,您可能会因为 ascii 字符而出错。您也可以使用这种方式来声明对象。 code var data = {key1:"value1",key2:"value2"};
【解决方案3】:

使用此代码:

 $.each(JSON.parse(data), function(index, value) {
   alert(index + ": " + value);
 });

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2016-03-03
    • 2013-01-15
    • 2016-05-13
    相关资源
    最近更新 更多