Представил
Причина в том, что он возвращает данные JSON интерфейсу и сообщает, что данные неверны (интерфейс копируется и изменяется на основе исходного кода, удаляя json p). Посмотрев на нижний внутренний код, я обнаружил, что код, возвращенный в JSON дважды, отличался. Но это не причина проблемы, а затем посмотрите на код JS, заключается в том, что интерфейс не был преобразован. Это также хороший шанс воспользоваться этой возможностью, чтобы взглянуть на моменты, которые я не замечал в обычное время.
Анализ
При написании кода и возврате некоторых коротких данных не существует метода инкапсуляции фреймворка, как показано ниже
exit(json_encode(['message' => 'test']));
В это время заголовки ответов Тип содержимого да текст/html
。
Если вы используете режим возврата ThinkPHP 3.0,
$this->ajaxReturn(['message' => 'test']);
В это время заголовки ответов Тип содержимого да текст/html;-8
. Посмотрите на исходный код, там есть эта строка кода
header('Content-Type:text/html; charset=utf-8');
заключение
На самом деле данные JSON специфичны Тип содержимого Да. приложение/json
. Позже я пошел посмотреть Laravel и вернулся в json. Тип контента А именно приложение/json
. Такие проблемы возникают из-за того, что они недостаточно строгие, а используемая структура несколько устарела. Кроме того, позже я посмотрел код интерфейса. На самом деле используется метод Ajax, инкапсулированный в jQuery. Тип данных Установлен в jsonp
возможно json
Он может быть автоматически преобразован в формат JSON, даже если Тип содержимого да текст/html;-8
В это время typeof
Функция выводит возвращаемое значение, которое является объектом Типом, поэтому предыдущий код не является проблемой. Или используйте JSON.parse()
Также можно преобразовать возвращаемое значение. Конечно, самое безопасное решение-это внутренние настройки. Тип содержимого по приложению/json
。
Ссылка: Тип содержимого.