【问题标题】:Iterating JSON list results in a "Error: Syntax error, unrecognized expression"迭代 JSON 列表会导致“错误:语法错误,无法识别的表达式”
【发布时间】:2014-06-26 07:41:13
【问题描述】:

我有一个 AJAX 调用,它调用一个控制器。此控制器返回以下 JSON:

{"officeProducts":"[{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":169,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":174,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}},{\"Id\":175,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}]"}

现在我想迭代列表。所以我基本上想迭代officeProducts

我有以下代码,显然我做错了什么,因为我得到:

错误:

Error: Syntax error, unrecognized expression: [{"Id":96,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":169,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":174,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}},{"Id":175,"MyProperty":null,"Enabled":true,"Envelope":{"Id":1,"Quality":"God","PaperSize":"A4","Type":"Window"}}]

我的 AJAX 调用:

self.updateOfficeProducts = function() {
    $.ajax({
        url: '/SingleLetter/GetOfficeProducts',
        type: 'POST',
        data: {
            'country': self.countryId
        },
        dataType: 'json',
        success: function (data) {
            console.log(data.officeProducts);

            $(data.officeProducts).each(function (index, ele) {
               alert(ele.Id);
            });
        }
    });
};

所以我希望迭代 4 个不同的对象,我可以在其中说出 ele.Idele.Enabled 之类的内容。相反,我得到了我的语法错误。

我做错了什么? :-) 显然是一些语法问题。

【问题讨论】:

    标签: jquery ajax json syntax


    【解决方案1】:

    使用JSON.parse-

    success: function (data) {
        data = JSON.parse(data);
        $(data.officeProducts).each(function (index, ele) {
           alert(ele.Id);
        });
        ...
    

    编辑

    另一件事 - 我不确定 .NET,但您得到的响应不是 ajax 所期望的形式。字符串未正确 json 编码。

    您必须在[] 之前和之后删除",所以字符串将是-

    var a = '{"officeProducts": [{\"Id\":96,\"MyProperty\":null,\"Enabled\":true,\"Envelope\":{\"Id\":1,\"Quality\":\"God\",\"PaperSize\":\"A4\",\"Type\":\"Window\"}}] }';
    //                         ^here                                                                                                                           and here^        
    

    JSFiddle

    希望对您有所帮助。

    【讨论】:

    • 嗨。如果我像这样使用“JSON.parse”或“$.parse”,我会得到:“SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data”
    • 您可能没有以正确的形式从 PHP 发送数据。如果您在那里进行数据库查询并返回响应,只需执行此操作 - 将所有内容存储在 stdClass/Array 中,然后只需从 PHP 和 js 中返回 json_encode($result)JSON.parse(data) 将正确获取结果
    • 嗯,我已经这样做了。我使用 C#/.NET,我的代码是: return Json(new { officeProducts = JsonConvert.SerializeObject(models) }); (和json_encode一样)
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    • 2013-02-26
    相关资源
    最近更新 更多