2010-01-18 11 views
7

devo inviare i dati dal mio modulo HTML al server in formato XML, qualcosa di simile a:Come inviare XML al server attraverso il modulo HTML?

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

Tutto quello che so è che va a una delle applicazioni CRM eseguiti su diversi dominio. Ora non sono sicuro di quale sia il modo migliore per farlo.

Stavo pensando di avvolgere i valori dei campi nella mia forma quando l'utente invia il modulo. Quindi, se l'utente digita "Homer" nel campo "Nome" e fa clic su Invia, il mio JS cambierebbe il valore del campo in <firstname>Homer</firstname> e quindi pubblicherà i dati.

Se aiuta, sto usando jQuery sul lato client. Penso che ci debba essere il modo migliore in quanto la mia soluzione si romperebbe con JS disabilitata e sembra un po 'dubbia, quindi se potessi indicarmi la giusta direzione sarebbe fantastico.

+0

Al fine di qualcuno per aiutarti, avranno bisogno di sai cosa stai usando per il tuo back-end. –

risposta

3

Il modo migliore che posso pensare è intercettare l'azione di invio del modulo e convertire i dettagli del modulo in formato XML, quindi inviarlo al server. Ci sono molti modi per farlo, ma il più semplice sarebbe quella di implementare una soluzione tramite un framework come jQuery:

Un esempio di questa cosa si può trovare online all'indirizzo http://www.docunext.com/...data-to-xml-with-jquery che utilizza la 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; 
}); 
+0

Entrambi i collegamenti sono morti! – thomaskonrad

+0

@thomaskonrad Ho corretto i collegamenti (reindirizzando gli archivi al wayback). È probabile che alcuni download e altre risorse potrebbero non funzionare. Fammi sapere se incontri altri problemi. – Sampson

2

È possibile inviare un XML utilizzando XFORMS. Per esempio vedere: http://www.mozilla.org/projects/xforms/

+0

+1 ma questo non è supportato sulla maggior parte dei browser a mia completa conoscenza. –

+1

Obsoleto da Gecko 19 (Firefox 19/Thunderbird 19/SeaMonkey 2.16) –

8

È impossibile pubblicare XML senza javascript o plug-in del browser. I due formati possibili per la pubblicazione di moduli html sono application/x-www-form-urlencoded e multipart/form-data.

+0

Intendi ** possibile ** al posto di impossibile? – MaxZoom

4

ho appena ricevuto questo lavoro in cromo, la chiave sta avendo lo spazio vuoto nel nome di testo:

<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> 
0

Se il codice server-side è un'opzione, è possibile utilizzare uno script CURL PHP personalizzato come un intermediario per inoltrare la richiesta alla terza parte in un formato xml effettivo. Non sono sicuro che CURL sia dotato di un'installazione php standard, e se non è un'opzione, probabilmente si potrebbe usare fsocketopen (anche se personalmente penso che la tattica sia più difficile). Ma CURL è abbastanza facile da installare ed estremamente utile per consentire sostanzialmente a php di inviare richieste come se fosse un browser. La differenza a cui potresti essere interessato qui, è che in realtà ti permette di impostare l'intestazione "Content-type: text/xml".

Così il tuo modulo html invia alcuni valori GET o POST al tuo script php. Quindi fai in modo che lo script php personale li converta nel formato XML che la terza parte si aspetta. (Non dimenticare di precedere con il tag <?xml version="1.0" encoding="ISO-8859-1"?>, con qualsiasi attributo valori sono appropriati per voi.) E poi inviarlo via via di questo codice:

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