下面,您可以看到这两个日志的输出。第一行代码清楚地显示了我试图访问的属性的完整对象,但在下一行代码中,我无法使用配置访问它。Col_id_3(见截图中的“undefined”?)有人能解释一下吗?我也可以访问除field_id_4之外的所有其他属性。

console.log(config);
console.log(config.col_id_3);

这就是这些行在控制台中打印的内容


当前回答

我也面临同样的问题。

从服务器,我在json_encode中返回数据。 像这样

 echo json_encode($res);  

当我返回一个不带json_encode的简单PHP数组后,问题就解决了。

return $res;

其他回答

我也遇到了这个问题,长话短说,我的API返回的是字符串类型,而不是JSON。所以当你把它打印到日志中时,它看起来完全一样,但是每当我试图访问属性时,它给了我一个未定义的错误。

火守则:

     var response = JsonConvert.DeserializeObject<StatusResult>(string Of object);
     return Json(response);

之前我刚回来

return Json(string Of object);

首先,像下面这样检查类型:

console.log(typeof config);

如果上面的命令打印object,那么很简单,你只需使用括号符号。如果您想动态搜索属性的值,括号符号可能非常有用。

执行以下命令:

console.log(config[col_id_3]);

如果它是一个字符串,你需要先在对象中解析。要做到这一点,你需要执行以下命令:

var object = JSON.parse(config);

然后使用括号来访问属性,如下所示:

console.log(object[col_id_3]);

我今天在这个问题上很纠结,我想我会留下我的解决方案。

我通过ajax获取一个数据对象,就像这样: {“常量”:{“value1”:“x”,“value2”:“y”},“国际化”{“data1”:“x”,“data2 ": " y "}}

假设这个对象在一个名为data的变量中。每当我引用数据时。i18n没有定义。

Console.log (data)显示了预期的对象 console.log(Object.keys(data))显示["constants","i18n"] 将i18n重命名为inter并没有改变任何东西 我甚至尝试切换数据,使“i18n”成为第一个对象 移动代码以确保完全设置了对象,ajax承诺也没有问题。

没有什么帮助…然后在服务器端,我将数据写入php日志,它揭示了这一点:

{“常量”:{“value1”:“x”,“value2”:“y”},“\ u045618n”{“data1”:“x”,“data2 ": " y "}}

索引键中的“i”实际上是一个u0456(西里尔字母i)。这在我的php编辑器或浏览器控制台日志中不可见。只有php日志显示这个…这是个棘手的问题……

在我的情况下,我将一个对象传递给一个承诺,在承诺中,我向对象添加了更多的键/值,当它完成时,承诺返回对象。

然而,我稍微多看了一下,承诺是在完全完成之前归还对象……因此,我的其余代码试图处理更新的对象,而数据还没有出现。但就像上面一样,在控制台中,我看到对象完全更新,但无法访问键-它们返回时未定义。直到我看到了这个:

console.log(obj) ;
console.log(obj.newKey1) ;

// returned in console
> Object { origKey1: "blah", origKey2: "blah blah"} [i]
    origKey1: "blah"
    origKey2: "blah blah"
    newKey1: "this info"
    newKey2: "that info"
    newKey3: " more info"
> *undefined*

[i]是一个小图标,当我悬停在它上面时,它说左边的对象值在记录时被快照,下面的值刚刚被评估。这时我突然想到,我的对象在承诺完全更新之前就已经被评估了。

我也遇到过类似的问题(在为SugarCRM开发游戏时),我的出发点是:

var leadBean = app.data.createBean('Leads', {id: this.model.attributes.parent_id});

// This should load object with attributes 
leadBean.fetch();

// Here were my attributes filled in with proper values including name
console.log(leadBean);

// Printed "undefined"
console.log(leadBean.attributes.name);

问题是在fetch(),它的异步调用,所以我必须重写我的代码:

var leadBean = app.data.createBean('Leads', {id: this.model.attributes.parent_id});

// This should load object with attributes 
leadBean.fetch({
    success: function (lead) {
        // Printed my value correctly
        console.log(lead.attributes.name);
    }
});