Представил
Причина в том, что он возвращает данные 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 。
Ссылка: Тип содержимого.