tags:

views:

229

answers:

4

I have to post data from my HTML form to server in xml format, something like:

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

All I know it goes to one of the CRM applications run on different domain. Now I'm not sure what is the best way to do that. I was thinking of just wrapping values of fields in my form when user submits the form. So if user typed "Homer" in "firstname" field and clicks submit, my JS would change the value of the field to <firstname>Homer</firstname> and then post the data. If it helps I'm using jQuery on client side. I think there must be the better way as my solution would break with JS disabled and seems a bit dodgy so if you could point me out in the right direction that would be awesome.

+2  A: 

You can send a XML using XFORMS. For example see: http://www.mozilla.org/projects/xforms/

Pierre
+1 but this isn't supported on most browsers to my best knowledge.
the_drow
+1  A: 

Posting XML without javascript or browser plugins is impossible. The two possible formats of posting html forms are application/x-www-form-urlencoded and multipart/form-data.

Darin Dimitrov
A: 

The best way I can think of is to intercept the form-submit action, and convert the form details into XML format, and then submit that to the server. There are many ways to do this, but the easiest would be to implement a solution via a framework like jQuery:

An example of this very thing can be found online at http://www.docunext.com/...data-to-xml-with-jquery which utilizes the 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;
});
Jonathan Sampson
A: 

Well, if you are submitting data from your form to the server directly then you need to do 1 of 2 things.

  1. Have a textarea with the XML that is editable (bad idea)
  2. Use javascript.

The second method would be easiest to accomplish (imho) by using the jQuery and method outlined here

sberry2A