如何通过HTML表单将XML发布到服务器?

时间:2010-01-18 20:09:17

标签: jquery html xml forms

我必须将我的HTML表单中的数据以xml格式发布到服务器,例如:

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

我所知道的是它涉及在不同域上运行的CRM应用程序之一。现在我不确定最好的方法是什么。

我想在用户提交表单时只是在表单中包装字段的值。因此,如果用户在“firstname”字段中键入“Homer”并单击“提交”,我的JS会将该字段的值更改为<firstname>Homer</firstname>,然后发布数据。

如果它有助于我在客户端使用jQuery。我认为必须有更好的方法,因为我的解决方案会破坏JS禁用并且看起来有点狡猾,所以如果你能指出我正确的方向会很棒。

5 个答案:

答案 0 :(得分:9)

在没有javascript或浏览器插件的情况下发布XML是不可能的。发布html表单的两种可能格式是application/x-www-form-urlencodedmultipart/form-data

答案 1 :(得分:6)

我只是在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> 

答案 2 :(得分: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;
});

答案 3 :(得分:2)

您可以使用XFORMS发送XML。例如,请参阅:http://www.mozilla.org/projects/xforms/

答案 4 :(得分:0)

如果服务器端代码是一个选项,您可以使用自定义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);