JQuery AJAX - Неожиданный токен + parsererror

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

script:

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

Попробуйте

 alert( jqXHR.responseText);

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

введите описание изображения здесь

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

Ответ 6

Это может быть проблема с missmatching ассоциативными/числовыми массивами PHP и объектами Javascript.

Попробуйте следующее:

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

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