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

php jquery json

24382 просмотра

1 ответ

Я использовал 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);
        });
    });
});
Автор: Faizuddin Mohammed Источник Размещён: 12.11.2019 09:02

Ответы (1)


21 плюса

Решение

Если вы $.parseJSON(data)используете обработчик успеха ajax, поскольку вы $.parseJSON(data)используете обработчик успеха ajax, проблема почти наверняка в том, что 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
        });
    });
});
Автор: T.J. Crowder Размещён: 20.04.2015 07:19
Вопросы из категории :
32x32