Как отправить XML на сервер через HTML-форму? - PullRequest
7 голосов
/ 18 января 2010

Мне нужно отправить данные из моей HTML-формы на сервер в формате xml, что-то вроде:

<some_parameters>
    <firstname>Homer</firstname>
    <lastname>Simpson</lastname>
    <street>74 Evergreen Tr.</street>
</some_parameters>

Все, что я знаю, это то, что оно идет в одно из приложений CRM, запущенных в другом домене.Теперь я не уверен, что это лучший способ сделать это.

Я думал просто обернуть значения полей в моей форме, когда пользователь отправляет форму.Поэтому, если пользователь введет «Homer» в поле «firstname» и нажмет «submit», мой JS изменит значение поля на <firstname>Homer</firstname>, а затем опубликует данные.

Если это поможет, я использую jQuery на стороне клиента.Я думаю, что должен быть лучший способ, так как мое решение сломалось бы с отключенным JS и кажется немного хитрым, поэтому, если бы вы могли указать мне правильное направление, это было бы здорово.

Ответы [ 5 ]

9 голосов
/ 18 января 2010

Размещение XML без плагинов JavaScript или браузера невозможно. Два возможных формата размещения HTML-форм: application/x-www-form-urlencoded и multipart/form-data.

6 голосов
/ 20 августа 2013

Я только что получил это для работы в Chrome, ключ имеет пробел в имени текстовой области:

<html>
    <body>
        <form action="http://target_webservice" method="post">
            <textarea rows="20" cols="100" name=" ">
                <?xml version="1.0"?><requestElements><blah></blah></requestElements>
            </textarea>
            <input type="submit" value="Submit">
        </form>        
    </body>
</html> 
3 голосов
/ 18 января 2010

Лучший способ, о котором я могу подумать, - это перехватить действие отправки формы, преобразовать детали формы в формат XML и затем передать это на сервер. Есть много способов сделать это, но самым простым было бы реализовать решение с помощью фреймворка, такого как jQuery:

Пример этой самой вещи можно найти в Интернете по адресу http://www.docunext.com/...data-to-xml-with-jquery, который использует JSON to XML Plugin :

$("#myform").submit(function(){
  var formjson = $('#myform').serializeArray();
  var formxml = json2xml(formjson);
  $.post("/collect.php", { 'data': formxml }, function(data){ 
    // callback logic
  });
  return false;
});
2 голосов
/ 18 января 2010

Вы можете отправить XML, используя XFORMS . Например, см .: http://www.mozilla.org/projects/xforms/

0 голосов
/ 02 июня 2015

Если серверный код является опцией, вы можете использовать собственный сценарий php CURL в качестве посредника для пересылки вашего запроса третьей стороне в реальном формате xml. Я не уверен, что CURL поставляется со стандартной установкой PHP, и если это не вариант, вы могли бы вместо этого использовать fsocketopen (хотя лично я думаю, что тактика сложнее). Но CURL достаточно прост в установке и чрезвычайно полезен для того, чтобы позволить php отправлять запросы, как если бы это был браузер. Разница, которая может вас заинтересовать, заключается в том, что она действительно позволяет вам установить заголовок «Content-type: text / xml».

Итак, ваша HTML-форма отправляет некоторые обычные значения GET или POST в ваш php-скрипт. Затем пусть этот личный php-скрипт преобразует их в формат XML, который ожидает третья сторона. (Не забудьте поставить перед ним тег <?xml version="1.0" encoding="ISO-8859-1"?> с любыми значениями атрибутов, которые вам подходят.) А затем отправьте его с помощью этого кода:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-type: text/xml', 
    'Content-length: '.strlen($xmlRequest),
));
$output = curl_exec($ch);
curl_close($ch);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...