Ладно люди. Я получил эту ошибку, и я попробовал все решения, которые люди с той же проблемой использовали для ее решения. Ничего такого. Мне нужно использовать функцию jQuery «ajax», чтобы получить некоторые данные из php, а затем распределить данные в некоторых входах. Если я использую text как dataType, он работает как шарм, но с json dataType я получаю эту ошибку:
SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data
Мой код:
js
$.ajax({
type: 'get',
url: globals.rootdir + '/controller.php?op=do_something&module=56',
dataType: 'json',
data: {
year: previouslyDeclaredYearVar
},
success: function (data) {
alert('good');
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
php - функция контроллера do_something
if (!isAjaxRequest()){
return;
}
header("Content-type: application/json");
... do things
echo json_encode(['result'=>'test-ajax-ok']);
Какой data возвращается вашему обработчику success?
проверьте наличие пробелов в выводе, посмотрев на вкладку сети консоли браузера.
Вы пытались принять данные как строку и просто посмотреть, что с ними не так, вместо того, чтобы позволить $ попытаться проанализировать их для вас ... я имею в виду "тип данных".
Также не используйте alert, используйте console.info() и научитесь жить в окне инструментов разработчика; p
Что произойдет, если вы удалите header("Content-type: application/json"); до эха? По моему опыту, в этом не должно быть необходимости.
Как выглядят данные JSON, не видя, что это просто предположение, это может быть так же просто, как \s<?php, пробел или возврат строки перед тегом открытия / закрытия PHP (они тоже выводятся).
@Dave - на самом деле некоторые браузеры возвращают data в виде строки json без правильного заголовка, тогда вам нужно вручную проанализировать его, некоторые старые браузеры попытаются загрузить его как файл с ним ...: - /
@ArtisticPhoenix интересно ... спасибо за информацию. Я предполагаю, что это были бы старые (э-э) браузеры, которые могли бы это сделать?
Да, я думаю, что это был IE8 или IE9, может быть, он загрузит его как файл, если вы вставите заголовок, я обычно вставляю его сейчас, поэтому я не могу сказать, какой из текущих когда-то не распознал бы его как правильный JSON, я занимался веб-разработкой sense 2008, так что было время, когда мне приходилось иметь дело даже с IE6 ... (который был старым даже тогда, но все еще использовался) lol, часы, которые я трачу только на этот браузер, просто смешны.
Обычно то, что я делаю сейчас, это что-то вроде function(data){ if (typeof data == 'string' ){ try{ data = $.parseJSON(data); }catch(e){ data = {'error' : e.message, 'body' : data}; } в этом случае, если это JSON, все в порядке, если это строка, которую он пытается проанализировать, если не может, то устанавливается data.error (я использую это для ошибок на стороне сервера), тогда я помещаю содержимое строковые данные в свойстве. Таким образом, если это ошибка на стороне сервера, которая не была должным образом обнаружена и обернута в JSON, мне есть на что посмотреть. Это охватывает большую часть материала. Я обычно использую обратный вызов .allways для 404 и таких ошибок тоже
@ Дэйв, я уже пробовал.
@ArtisticPhoenix, я попробую и дам тебе знать
@BlackNetworkBit Нет, потому что он работает, если я изменю dataType на 'text'
Пожалуйста, проверьте запрос от сервера с помощью инструментов отладки вашего браузера. Ваша ошибка - это типичная неправильно сформированная строка Json.






Скорее всего, у вас есть ошибка в вашем php-коде, которая повреждает ваш формат json. Или у вас есть предупреждения php.