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