Отправить xml / json / jsonp методом POST / GET с помощью PHP / JavaScript, обработка и прием

 

В данном посте я собрал готовые простые решения, необходимые каждому web разработчику, сталкивающегося с отправкой (POST/GET) и обработкой полученных данных (xml, json, …).

logo

 

Здесь для себя вы найдете:

  1. как сформировать XML, JSON и отправить данные с помощью JavaScript (JQuery) на сервер (локальный)
  2. как обработать полученные данные на стороне сервера, т.е. парсинг xml, json с помощью PHP
  3. как обработать полученные ответ с сервера (парсинг XML, JSON и как запустить полученный javascript) с помощью JavaScript (JQuery)
  4. как отправить данные с помощью JavaScript (JQuery)  на удаленный сервер (JSONP)
  5. как передать данные обратно браузеру с удаленного сервера (JSONP) с помощью PHP
  6. как сформировать XML, JSON и отправить данные с помощью PHP на другой сервер (серверный скрипт)


Что-бы было проще изложение готовых решений, рассмотрим 6-е крайних ситуации, с которыми мы многие из нас встречаемся в работе:

 

Ситуация №1

 

«нужно отправить данные с браузера на локальный сервер» (т.е. сервер с которого загружается сайт)

pic1

Решение:

Для начала, я хочу сказать, что все что касается JavaScript мы будем делать через фреймворк JQuery, поэтому в html коде необходимо подключить его

Скачать файл jQuery сможете на официальном сайте

Для отправки данных локальному серверу в html коде страницы, должен быть следующий код JavaScript код

Если нам нужно отправить на локальный сервер данные в формате XML или JSON, то мы их можем передать в одном из параметре POST/GET запроса.

Например, следующий код сформирует XML и отправит его на локальный сервер, т.е.  script.php.

Второй пример, сформируем JSON и также отправим его на локальный сервер, т.е. скрипту script.php, но для начала нужно подключить плагин jquery-json

Скачать его можно здесь

Результирующий код

Проверить, что мы, все таки отправляем можно с помощью следующего скрипта, сохраните его под именем «script.php». Данный скрипт при получение POST/GET запроса сохраняет переданные данные в data.txt.

 

Ситуация №2

 

«нужно отправить данные с браузера на удаленный сервер» (на другой домен)

pic2

Решение:

Сначала я продемонстрирую решение в упрощенном виде (используем $.getJSON)

Ответ сервера  выводится в консоль (параметр request).

Теперь тоже самое но через $.ajax

Какие преимущества через $.ajax? Да пожалуй только то, что можно поставить обработчик на событие error.

 

Ситуация №3

 

«серверу (php) по запросу нужно отправить данные обратно браузеру  используя технологию JSONP»

pic3

Для этого на стороне сервера должен быть следующий php скрипт

 

 

Ситуация №4

 

«по запросу к серверу нужно получить ответ (xml, json, script) и обработать его»

pic4

Решение:

1. Отправим POST/GET запрос на сервер (локальный) и обработаем полученный ответ — xml

Допустим сервер по запросу должен вернуть следующий xml

Тогда наш  js код:

 

2. Отправим POST/GET запрос на сервер (локальный)  и обработаем полученный ответ — json

Допустим сервер по запросу должен вернуть следующий json

Тогда наш js код:

 

P.S. Отправлять POST/GET запросы и обрабатывать ответы помимо выше указанных вариантов можно с  помощью функций $.post() и $.get(), это сокращает код. В в качестве аргументов данные функции принимают: «url адрес отправки», данные {ключ:значение} и функция обработчик. Например также как и выше отправим два параметра {request:»message»,request2:»message2″} и выведем значение параметра test1 полученного json

Для GET запроса все аналогично, только вместо $.post(…) используем $.get(…) .

 

3. Отправим GET запрос на сервер (на удаленный или локальный не важно) и выполним полученный javascript

Допустим сервер по GET запросу возвращает следующий js код:

Тогда наш js код должен выглядеть так, сначала упрощенный вариант:

Тоже самое но, через $.ajax

Преимущество использования $.ajax в данном случае перед $.getScript, в возможности отправки данных на сервер. С помощью $.ajax можно, с помощью $.getScript нельзя.

При выполнение любого из вариантов указанных выше, будет исполнен загруженный с сервера js скрипт, т.е. будет выведено окно «Полученный скрипт».

 

 

Ситуация №5

 

«нужно отправить POST/GET запрос с данными (xml, json) с помощью PHP на другой сервер (локальный или удаленный не важно)»

pic5

Для отправки HTTP запроса любому другому серверу мы будем использовать PHP функцию fsockopen().

Первый делом я опишу как сформировать XML и JSON, а потом предоставлю PHP скрипт который посылает HTTP запрос любому другому серверу.

1. Сформируем XML

Сформировать XML можно «ручным» способом, т.е. создать строку и наполнить ее XML содержимым

или более правильным, но медленным способом используя PHP класс domDocument

Оба способа в данном примере формируют идентичный XML, вы можете выбрать любой.

2. Сформируем JSON

Создадим JSON  «ручным» способом, т.е. создадим строку и наполнить ее JSON содержимым

Другой пример, создадим JSON с помощью функции json_encode()

 

3. Отправим наш XML или JSON на какой либо сервер

В ниже  расположенном скрипте, нужно только выбрать метод POST или GETip адрес или доменное имя сервера куда шлем, имя принимающего скрипта на сервере и значение параметра request =>, т.е. какие данные слать

 

 

Ситуация №6

 

«серверу (PHP) нужно принять данные (просто параметры, xml, json) и обработать их»

pic6

1. Тут все просто, если мы хотим просто принять параметры POST/GET запроса, то это сделает следующий PHP код:

2. Если нам в одном из параметров запроса передали массив, то работать мы с ним можем таким образом:

3. Если в одном из параметров находится XML, то работать с ним будет удобно используя расширения SimpleXML (встроено в php с версии 5), а конкретнее, мы будем использовать функцию simplexml_load_string().

Пусть на php скрипт приходит GET запрос, с параметром request, который содержит следующий XML

Тогда PHP скрипт обрабатывающий данный XML может выглядеть так:

При запросе к нему, он вернет значение тега to (или значение атрибута если раскоментировать строку ниже).

4. Если в одном из параметров запроса находится JSON, то работать с ним будет удобнее используя функцию json_decode().

Пусть на php скрипт приходит POST запрос, с параметром request, который содержит следующий JSON

Тогда PHP скрипт обрабатывающий данный JSON может выглядеть так:

При запросе к нему, он вернет значение параметра test1 (или значение вложенного параметра test2_in  если раскоментировать строку ниже).

 




Буду признателен если вы поделитесь данным постом

Комментарии
  1. Артем пишет:

    Здравствуйте!
    А если нужно отправить xml запрост по api используя ключ

    А получить вот такой xml

    1
    0541

    1
    0542

    То как сформировать запрос?

  2. admin пишет:

    Добрый день Артем, что за API вы имеете ввиду?

  3. Артем пишет:

    Меня интересует как сделать запрос к api имея ключ и получить xml ответ … Я бы написал xml код но сайт его убирает

  4. Артем пишет:

    У меня есть инструкция к api поставщика, но у меня не получается написать скрипт для выгрузки товаров… можете подсказать пожалуйста?

    вот инструкция
    http://demo.onmarket.com.ua/kiddisvit_instruction_api.pdf

  5. admin пишет:

    Кроcсдоменная передача xml, хм…, с этим я не сталкивался. Обычно данные на удаленный сервер передают в виде JSON.
    Я могу попытаться помочь разобраться в этой проблеме, дайте мне знать в комментарии и я свяжусь с вами по почте и мы договоримся о стоимости.

  6. Кирилл пишет:

    Здравствуйте, а при получении xml в ответе, как его в последствие распарсивать?

  7. admin пишет:

    В посте приведен пример простого парсинга xml

    Обратите внимание на строки
    var return_value=$.parseXML(res); //конвертируем xml строку в xml документ
    console.log($(return_value).find('to').text()); //выведем в консоль значение тега to

  8. Кирилл пишет:

    И еще вопрос, если позволите, как в xml вставить php переменные?

  9. Кирилл пишет:

    Здравствуйте напишите пожалуйста на почту.

  10. admin пишет:

    Добрый день Кирилл, я вам ответил на почту.

  11. Alex пишет:

    А как передать json через HTTPS URL и ещё когда строка URL выглядит с использованием ЧПУ, например: https://mydomain.com/ipp/create
    ?

  12. admin пишет:

    Добрый день Алекс!

    Если вы отправляете с PHP скрипта (т.е. не с браузера), вам нужно смотреть в сторону cURL. Данная библиотека позволяет работать с HHTPS протоколом. В моих примерах я использовал сокеты, формирование JSON думаю должно быть аналогичным, далее для отправки используйте функции библиотеки cURL.

    Насчет отправки с браузера, я затрудняюсь ответить.

    По поводу, ЧПУ, вы отсылаете свои данные по таком уже url адресу, т.е. с ЧПУ.

  13. Алекс пишет:

    Спасибо! Замечательная статья!

  14. admin пишет:

    Спасибо Алекс за отзыв! Вы можете поддержать проект, с помощью кнопки «сделать пожертвование».



Ваш комментарий


Ответ в цифрах

 
© s-engineer.ru, 2012-2017 | Все права защищены