Отправить JSON из php-обработки на общедоступную страницу coldfusion

#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 в браузер в прямом запросе.