SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 2 данных JSON - FireBug сообщает об этой ошибке. Любое решение?

Я использовал Laravel Response:: json для генерации ответа JSON.

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

Когда я запускаю запрос, я получаю действительный JSON (проверенный в JSONLint) в качестве ответа.

Но следующий метод jQuery не работает: $.parseJSON(data)

В FireBug появляется следующая ошибка:

SyntaxError: JSON.parse: неожиданный символ в строке 1 столбца 2 данных JSON

Ответ, который я получаю:

{
 "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);
 });
 });
});
1 ответ

Если вы выполняете $.parseJSON(data) в обработчике успеха ajax. Поскольку вы выполняете $.parseJSON(data) в обработчике успеха ajax, проблема почти наверняка заключается в том, что jQuery имеет уже проанализировал его для вас. jQuery будет смотреть на Content-Type ответа и, если он application/json, он проанализирует его и предоставит обработанный результат вашему обработчику успеха. Первое, что произойдет, если вы передадите это значение в $.parseJSON, будет заключаться в том, что он будет преобразован обратно в строку ("[object Object]" в вашем случае), которая $.parseJSON не сможет проанализировать.

Просто используйте data as-is, это уже объект, благодаря автоматическому разбору:

$(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
 });
 });
});

licensed under cc by-sa 3.0 with attribution.