JQuery AJAX - неожиданный токен + parsererror - PullRequest
15 голосов
/ 17 сентября 2011

Сегодня я написал скрипт, используя jQuery и AJAX, и получаю некоторые ошибки ...

Сценарий:

function changeAdmin(id) {
$(document).ready(function() {
    $('#ta-modarea-'+id).fadeOut('fast');
    $('#ta-m-loading-'+id).fadeIn('fast');

    $.ajax({
        type: 'POST',
        url: 'ajax_utf.php?a=changeteamadmin',
        dataType: 'json',
        data: {
            admin : $('#admin-id-'+id).val()
        },
        success: function(data) {
            $('#ta-m-loading-'+id).fadeOut('fast');
            $('#ta-modarea-'+id).text(data.msg).fadeIn('fast');
        },
        error: function(jqXHR, textStatus, errorThrown) {
            $('#ta-m-loading-'+id).fadeOut('fast');
            $('#ta-modarea-'+id).text('HTTP Error: '+errorThrown+' | Error Message: '+textStatus).fadeIn('fast');
        }
    });

    return false;
});
}

После запуска я получаю следующее сообщение об ошибке: HTTP Error: SyntaxError: Unexpected token < | Error Message: parsererror

Не могли бы вы мне помочь, что мне делать?

Ответы [ 6 ]

7 голосов
/ 06 июля 2012

Вам нужно отправить заголовок application/json через PHP, например:

header('Content-type: application/json');

Это потому, что jQuery отправляет заголовок Accept (application/json, text/javascript), и это является причиной parseerror, вызванной jqXHR.

3 голосов
/ 17 сентября 2011

Попробуйте

 alert( jqXHR.responseText);

в вашей функции ошибки

2 голосов
/ 01 июля 2013

Если вы попытались установить тип содержимого заголовка и все еще получаете сообщение об ошибке. Я ожидаю, что сервер отвечает с ошибкой из вашего кода на стороне сервера. Обычно, когда выдается отладочное сообщение, оно находится в чистом HTML, а не в формате JSON, поэтому неожиданный токен.

Самый быстрый способ отладки это установить DataType HTML вместо JSON, чтобы вы могли видеть любой вывод с сервера, а не только данные в формате JSON.

Как только вы увидели ошибку, создаваемую кодом на стороне сервера, и исправили ее, вы можете вернуться к типу данных DataType JSON.

1 голос
/ 08 апреля 2016

Попробуйте код ниже, но если вы получаете сообщение об ошибке типа «Неожиданный токен <», вам нужно проверить ваш php файл - «ajax_utf.php» и проверить, что возвращается в браузере (Chrome) View-> Developer-> Developer Инструменты, вкладка Сеть -> XHR.

enter image description here

         $.ajax({
                type: 'post',
                url: postLink,
                dataType: 'json',
                data: postData,

            beforeSend: function (x) {
                if (x && x.overrideMimeType) {
                    x.overrideMimeType('application/json;charset=UTF-8' );
                }
            },
            success: function (result) {
                //console.log(result);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                console.log(arguments);
            }
        });
1 голос
/ 29 октября 2013

contentType: "application / json; charset = utf-8",

0 голосов
/ 11 февраля 2013

Может возникнуть проблема с несовпадением ассоциативных / числовых массивов PHP и объектов Javascript.

Попробуйте это:

$data = new Array();
$data['test'][] = "Row 1";
$data['test'][] = "Row 2";
echo json_encode($json, JSON_FORCE_OBJECT);

Это должно заставить кодировщик json всегда кодировать объекты вместо числовыхмассивы и может решить проблему.

...