2010-01-18 2 views
7

я должен отправлять данные из моей HTML формы на сервер в формате XML, что-то вроде:Как разместить XML на сервер через HTML-форму?

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

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

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

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

+0

Для того, чтобы кто-то, чтобы помочь вам, они должны знайте, что вы используете для своего бэкэнд. –

ответ

3

Лучший способ, которым я могу думать, - перехватить действие формы-отправки и преобразовать данные формы в формат 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; 
}); 
+0

Оба ссылки мертвы! – thomaskonrad

+0

@thomaskonrad Я исправил ссылки (путем перенаправления на архивы по пути). Вероятно, некоторые из загрузок и других ресурсов могут не работать. Дайте мне знать, если вы столкнетесь с дальнейшими проблемами. – Sampson

2

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

+0

+1, но это не поддерживается большинством браузеров для моих лучших знаний. –

+1

Устаревшее с Gecko 19 (Firefox 19/Thunderbird 19/SeaMonkey 2.16) –

8

Публикация XML без javascript или плагинов браузера невозможна. Двумя возможными форматами размещения html-форм являются application/x-www-form-urlencoded и multipart/form-data.

+0

Вы имеете в виду ** возможно ** вместо невозможного? – MaxZoom

4

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

<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> 
0

Если серверы-код на стороне вариант, вы можете использовать CURL сценарий пользовательских PHP в качестве посредника переслать ваш запрос на третьей стороне в реальном формате xml. Я не уверен, что CURL поставляется со стандартной установкой php, , и если это не вариант, вы можете использовать fsocketopen вместо этого (хотя лично я считаю, что эта тактика сложнее). Но CURL достаточно проста для установки и чрезвычайно полезна, поскольку позволяет php отправлять запросы, как если бы это был браузер. Разница, которую может вас заинтересовать, заключается в том, что она действительно позволяет вам установить заголовок «Тип содержимого: текст/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); 
Смежные вопросы