【问题标题】:How to post XML to server thru HTML form?如何通过 HTML 表单将 XML 发布到服务器?
【发布时间】:2011-01-06 12:40:04
【问题描述】:

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

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

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

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

如果有帮助,我将在客户端使用 jQuery。我认为必须有更好的方法,因为我的解决方案会在禁用 JS 的情况下中断,而且看起来有点狡猾,所以如果你能指出我正确的方向,那就太棒了。

【问题讨论】:

  • 为了有人帮助您,他们需要知道您在后端使用什么。

标签: jquery html xml forms


【解决方案1】:

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

【讨论】:

  • 您的意思是 可能 代替不可能吗?
【解决方案2】:

我刚刚让它在 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> 

【讨论】:

  • 那仍然发布为 application/x-www-form-urlencoded
【解决方案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;
});

【讨论】:

  • 两个链接都失效了!
  • @thomaskonrad 我已经修复了链接(通过在返回时重定向到档案)。可能某些下载和其他资源可能无法正常工作。如果您遇到任何其他问题,请告诉我。
【解决方案4】:

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

【讨论】:

  • +1 但据我所知,大多数浏览器都不支持此功能。
  • 自 Gecko 19 (Firefox 19 / Thunderbird 19 / SeaMonkey 2.16) 起已过时
【解决方案5】:

如果服务器端代码是一个选项,您可以使用自定义 php CURL 脚本作为中间人,以实际 xml 格式将您的请求转发给第三方。我不确定 CURL 是否带有标准的 php 安装, 如果它不是一个选项,你可能会使用 fsocketopen 代替(虽然我个人认为这种策略更难)。但是 CURL 很容易安装,并且对于基本上允许 php 像浏览器一样发送请求非常有用。您可能在这里感兴趣的区别在于,它实际上允许您设置标题“Content-type: text/xml”。

所以让你的 html 表单发送一些常规的 GET 或 POST 值到你的 php 脚本。然后让该个人 php 脚本将它们转换为第 3 方期望的 XML 格式。 (不要忘记在它前面加上 &lt;?xml version="1.0" encoding="ISO-8859-1"?&gt; 标记,使用适合您的任何属性值。)然后通过以下代码将其发送出去:

$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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多