我必须将我的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禁用并且看起来有点狡猾,所以如果你能指出我正确的方向会很棒。
答案 0 :(得分:9)
在没有javascript或浏览器插件的情况下发布XML是不可能的。发布html表单的两种可能格式是application/x-www-form-urlencoded
和multipart/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);