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

Jquery 如何通过HTML表单将XML发布到服务器?,jquery,html,xml,forms,Jquery,Html,Xml,Forms,我必须以xml格式将HTML表单中的数据发布到服务器,例如: <some_parameters> <firstname>Homer</firstname> <lastname>Simpson</lastname> <street>74 Evergreen Tr.</street> </some_parameters> 荷马 辛普森 74常青。 我所知道的是,它会转到在不同

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

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

荷马
辛普森
74常青。
我所知道的是,它会转到在不同域上运行的一个CRM应用程序。现在我不确定什么是最好的方法

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


如果有用的话,我会在客户端使用jQuery。我认为一定有更好的方法,因为我的解决方案会在禁用JS的情况下崩溃,而且似乎有点不可靠,因此如果您能为我指出正确的方向,那将是非常棒的。

您可以使用发送XML。例如,请参阅:

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

我能想到的最好方法是拦截表单提交操作,将表单详细信息转换为XML格式,然后将其提交给服务器。有很多方法可以做到这一点,但最简单的方法是通过jQuery这样的框架实现解决方案:

这方面的一个例子可以在网上找到,网址是:


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

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

因此,让html表单向php脚本发送一些常规GET或POST值。然后让个人php脚本将它们转换为第三方期望的XML格式。(别忘了在它前面加上
标记,以及适合您的任何属性值。)然后通过以下代码发送:

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

为了让别人帮助你,他们需要知道你的后端使用了什么。+1但据我所知,大多数浏览器都不支持这一点。Gecko 19(Firefox 19/Thunderbird 19/SeaMonkey 2.16)两个链接都已过时@thomaskonrad我已经修复了链接(通过重定向到wayback上的存档)。有些下载和其他资源可能无法使用。如果您遇到任何进一步的问题,请告诉我。您的意思是“可能”代替“不可能”吗?这仍然以application/x-www-form-urlencoded发布
$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);