#php #json #coldfusion
#php #json #coldfusion
Вопрос:
Я модифицирую чье-то существующее веб-приложение coldfusion. Я добавляю страницы php-обработки для выполнения различных задач. До этого момента я просто вызывал страницы php и взаимодействовал с веб-приложением, передавая переменные через URL.
Текущее использование:
public.cfm calls processing.php?id=69
Тогда обработка тоже будет делать то, что у нее есть, тогда в конечном итоге:
header("Location: $publichome?id=$idamp;importantstuff=$stuff");
exit();
И веб-приложение тоже поймет, где оно находится. Но теперь один из моих скриптов должен отправлять объект JSON обратно вместо простых переменных. Я не знаю, как это сделать. Я пытался сделать post с помощью cURL, но это не сработало, потому что мне нужна общедоступная страница coldfusion, чтобы взять верх, и curl возвращается к php-скрипту (я знаю, что могу повторить тело результата curl, но это удерживает меня в домене php-скрипта, который мне не нужен). Есть ли способ указать местоположение заголовка выше и отправить объект, потому что это то, что мне нужно — php-скрипт для остановки и страница coldfusion, которая будет обслуживаться вместе с объектом для работы.
Должен ли я создать какой-то JSON-сервис на php, который страница coldfusion будет вызывать для извлечения результата? Я также могу изменить страницу coldfusion любым удобным для меня способом.
Комментарии:
1. Я думал о сохранении JSON в базе данных, но он может содержать тысячи элементов, так что это кажется ужасной идеей.
Ответ №1:
Вы должны иметь возможность передавать строку json в качестве переменной URL, точно так же, как вы передаете более простые строки, через заголовок location . Вам понадобятся некоторые средства для json-сериализации объекта в php, если вы этого еще не сделали. Вероятно, для этого доступна библиотека json.
редактировать На основе дополнительной информации у меня теперь есть лучшее предложение:
Из CF сделайте запрос <cfhttp> к вашему PHP-коду, передавая любые параметры, необходимые PHP, в качестве аргументов в cfhttp. Из PHP просто «выведите» JSON в качестве тела ответа. После того, как вызов CFHTTP вернется к CF, у вас будет доступ к JSON через переменную cfhttp.fileContent, которую вы затем можете запустить через DeserializeJSON, чтобы вернуть реальный объект. Вот несколько примеров CF-кода:
<cfhttp url="processing.php?id=69" method="get"></cfhttp>
<cfset importantStuff=DeserializeJSON(cfhttp.fileContent)>
Комментарии:
1. Даже знаете, что в моем объекте JSON могут быть тысячи элементов? Можете ли вы предоставить какой-нибудь код?
2. Ах, в таком случае, нет. У вас есть доступ для изменения cf-кода? JSON необходимо отправить как post-данные (область формы). Это можно сделать либо из браузера (вводя в процесс новую страницу, которая включает форму со скрытым полем со значением json), либо из php. Если с php, вы могли бы включить вызов cf, который содержит json, перед перенаправлением вашего местоположения. Однако это может быть непросто, в зависимости от вашей необходимости сохранять json, связанный с сеансом данного пользователя. Если это так, дайте мне знать, и я смогу уточнить.
3. Да, я могу изменить страницу coldfusion любым удобным для меня способом. Все мое управление сеансом выполняется на стороне CF. В принципе, я начинаю в CF, затем вызываю php processing pages с некоторыми пользовательскими данными в URL для правильной обработки. Затем php генерирует JSON, и я должен вернуться к общедоступному CF с этими данными. Пожалуйста, уточните.
4. Вы имеете в виду «вывод JSON» в php просто чем-то вроде: echo $ myencodedjson; ??
5. да, точно так же, как если бы вы возвращали json в браузер в прямом запросе.