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 всегда кодировать объекты вместо числовых массивов и может решить проблему.