无法通过ajax调用获取对象的属性

时间:2017-12-07 15:11:15

标签: javascript ajax object

在Ajax上成功我在count变量中获取以下数据。使用(ajax调用成功的片段):

success: function (count) {
             console.log(count);
         }

在console.log(count)下方保存此数据,如浏览器控制台中所示:

{
    '07/12/2017': {
        'day': {'failed': 0, 'success': 3}, 
        'night': {'failed': 0, 'success': 0}
    }, 
    '06/12/2017': {
        'day': {'failed': 2, 'success': 20}, 
        'night': {'failed': 1, 'success': 291}
    }, 
    '05/12/2017': {
        'day': {'failed': 6, 'success': 50}, 
        'night': {'failed': 1, 'success': 51}
    }
}

我尝试访问数据时的问题(所有这些都在ajax成功函数中),比如我有一个变量日期=' 07/12 / 2017'我确实计算[日期]我得到未定义,但如果我手动复制和硬编码数据计数如下,那么count [date]将返回相应日期内的对象:

count = {
        '07/12/2017': {
            'day': {'failed': 0, 'success': 3}, 
            'night': {'failed': 0, 'success': 0}
        }, 
        '06/12/2017': {
            'day': {'failed': 2, 'success': 20}, 
            'night': {'failed': 1, 'success': 291}
        }, 
        '05/12/2017': {
            'day': {'failed': 6, 'success': 50}, 
            'night': {'failed': 1, 'success': 51}
        }
    }

可能是简单的事情,但它现在完全逃脱了我。

提前致谢

1 个答案:

答案 0 :(得分:1)

根据问题和评论中的证据,我认为count包含一个字符串。你所展示的是无效的JSON,也不是我见过的任何控制台在你console.log时代表对象的方式,所以我怀疑它是一个字符串,它实际上是从服务器到你的浏览器的。

如果是,则服务器发送无效的JSON。属性名称(以及所有其他字符串)必须是引号,而不是单引号。

所以解决方案是:

  1. 更正服务器的输出。输出JSON的最佳方法是来手工制作它,而是构建一个对象图,然后使用服务器端环境相当于JSON.stringify

  2. 如果您此时仍在接收字符串,请更新服务器代码,以便通过发送此标头正确识别您作为JSON发回的内容:

    Content-Type: application/json
    

    jQuery会在响应中看到该内容类型,并自动为您解析字符串。

  3. 然后,count会引用一个对象图,而使用count[date]的代码,其中date是字符串07/12/2017将起作用。

    这里正在使用jsFiddle使用jsFiddle方便的“回声”功能,它让我们告诉服务器回复一些东西给我们:https://jsfiddle.net/narxfmdm/以下是小提琴中的代码:

    var json = '{' +
    '    "07/12/2017": {' +
    '        "day": {"failed": 0, "success": 3}, ' +
    '        "night": {"failed": 0, "success": 0}' +
    '    }, ' +
    '    "06/12/2017": {' +
    '        "day": {"failed": 2, "success": 20}, ' +
    '        "night": {"failed": 1, "success": 291}' +
    '    }, ' +
    '    "05/12/2017": {' +
    '        "day": {"failed": 6, "success": 50}, ' +
    '        "night": {"failed": 1, "success": 51}' +
    '    }' +
    '}';
    $.ajax({
        type: "POST",
      url: "/echo/json/",
      data: {json: json, delay: 1},
      success: function(count) {
        var date = "07/12/2017";
        $("<p>").text("Data for " + date + ": " + JSON.stringify(count[date])).appendTo(document.body);
      }
    });