Я относительно новичок в разработке php, но не в веб-разработке в целом.
У меня есть следующий файл php:
<?php class dialogResult{ var $Message; var $Title; var $Height; var $GenericData; function __construct(){ $this->Height = 10; } } header("Cache-Control: no-cache", true); header("Content-type: application/json; charset=utf-8", true); $dr = new dialogResult(); $dr->Message = "A Test Message encoded"; $dr->Height = 10; $dr->GenericData = "Empty"; $dr->Title = "My Message"; echo(json_encode($dr)); ?>
Это возвращает данные JSON, как ожидалось, однако, если я переведу класс в отдельный файл и добавлю include, include_once, require или require_once, он возвращает недопустимые данные JSON. Может ли кто-нибудь сказать мне, почему это было бы?
Не нужно просто перемещать этот класс, если у меня есть ЛЮБОЙ включенный файл, он делает данные недействительными.
Благодаря,
Кит
Вот класс включения, я также попытался удалить?>
<?php class dialogResult{ var $Message; var $Title; var $Height; var $GenericData; function __construct(){ $this->Height = 10; } }
В любом месте нет ведущих или конечных пробелов. Вот возвращаемый «недействительный» JSON:
{"Message":"A Test Message encoded","Title":"My Message","Height":10,"GenericData":"Empty"}
который дает мне «Неожиданный токен», если я попытаюсь использовать JSONLint для его анализа. Конечно, если я наберу его вручную JSONLint, тогда это нормально. Я предполагаю, что есть какой-то персонаж, которого я не могу идентифицировать / видеть в JSON, но не знаю, как его найти.
Даже комментарии Мартина и Навнава правы, но пробелы обычно не недействительны для формата Json, поскольку они могут работать с двоичными форматами (например, GIF, JPEG и т. Д.).
Таким образом, ваша проблема может быть заголовком спецификации заголовком 2/3 байта, который многие редакторы не показывают или, что еще хуже, добавляют в начале файла.
РЕДАКТИРОВАТЬ
Возможный способ удаления спецификации – использовать и IDE, например phpstorm , с двоичным безопасным редактором, способным обнаруживать и удалять спецификацию.
Возможно, вы эхом / печатаете что-то на экране во включенных файлах.
JSON не подходит для другого контента.
Также ваши ?>
Теги – есть ли какие-либо строки-перерывы / пробелы после этого тега? Если это так, есть ваша проблема. Удалить их. Infact, если файл будет только конинировать PHP-код, полностью удалите тег ?>
Поскольку он не нужен.
Проверьте свой класс, если есть пробельные символы до [? Php и позади?]. Это приведет к тому, что контент, предоставленный браузеру, и создаст заголовок HTTP, не может быть создан предупреждением, что даст плохой JSON.
Проверьте свой сценарий – тот, который вы включаете в него, – также.
Это стало «лучшей практикой» для многих веб-разработчиков, которые просто не используют?> По этой точной причине.
Как выглядят недопустимые данные?