Как разместить XML на сервере через HTML-форму?
Я должен публиковать данные из моей 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 ответов
лучший способ, который я могу придумать, - перехватить действие отправки формы и преобразовать данные формы в формат XML, а затем отправить это на сервер. Есть много способов сделать это, но проще всего было бы реализовать решение через фреймворк, такой как jQuery:
пример этой самой вещи можно найти в интернете по адресуhttp://www.docunext.com/...data-to-xml-with-jquery который использует JSON в XML плагин:
$("#myform").submit(function(){
var formjson = $('#myform').serializeArray();
var formxml = json2xml(formjson);
$.post("/collect.php", { 'data': formxml }, function(data){
// callback logic
});
return false;
});
публикация XML без javascript или плагинов браузера невозможна. Двумя возможными форматами размещения html-форм являются application/x-www-form-urlencoded
и multipart/form-data
.
Я только что получил это для работы в 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>
вы можете отправить XML с помощью X-форм. Например, см.: http://www.mozilla.org/projects/xforms/
Если серверный код является опцией, вы можете использовать пользовательский скрипт 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"?>
tag, с любыми значениями атрибутов, подходящими для вас.) И затем отправьте его через этот код:
$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);