SyntaxError:JSON.parse:JSON数据第1行第2列的意外字符 – FireBug报告此错误。 有解决方案吗

我使用Laravel Response :: json生成JSON响应。

return Response::json(array('subjects' => $subjects, 'year' => $year, 'sem' => $sem)); 

当我运行请求时,我得到一个有效的JSON(在JSONLint中测试)作为响应。

但是以下jQuery方法失败: $.parseJSON(data)

我在FireBug中收到以下错误:

SyntaxError:JSON.parse:JSON数据的第1行第2列的意外字符

我收到的回复:

 { "subjects": [ { "id": 1, "name": "Control Systems", "semester": 1, "year": 3, "branch_id": 4 }, { "id": 2, "name": "Analog Communications", "semester": 1, "year": 3, "branch_id": 4 }, { "id": 3, "name": "Linear IC Applications", "semester": 1, "year": 3, "branch_id": 4 }, { "id": 4, "name": "Antennas & Wave Propagation", "semester": 1, "year": 3, "branch_id": 4 } ], "year": 3, "sem": 2 } 

以及我试图解析它的代码:

 $(document).ready(function() { $('#branchAndSubjects').click(function() { $.post('/findBranchAndSubjects', { roll: roll, _token: "{{csrf_token()}}" }, function(data) { var subjects = $.parseJSON(data); }); }); }); 

如果你在ajax成功处理程序中执行$.parseJSON(data)因为你在ajax成功处理程序中执行$.parseJSON(data) ,问题几乎肯定是jQuery 已经为你解析了它。 jQuery将查看响应的Content-Type ,如果是application/json ,它将解析它,并将解析后的结果提供给您的成功处理程序。 如果将其传递给$.parseJSON ,将会发生的第一件事就是它会被转换回字符串(在你的情况下为"[object Object]" ),然后$.parseJSON将无法解析。

由于自动解析,只需按原样使用data ,它已经是一个对象:

 $(document).ready(function() { $('#branchAndSubjects').click(function() { $.post('/findBranchAndSubjects', { roll: roll, _token: "{{csrf_token()}}" }, function(data) { console.log(data.year); // 3 console.log(data.subjects.length); // 4 console.log(data.subjects[0].name); // Control Systems }); }); });