2010-01-18 9 views
7

muszę dodawać dane z mojego formularza HTML do serwera w formacie XML, coś jak:Jak wysłać XML do serwera poprzez formularz HTML?

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

Wiem tylko, że jedzie do jednej z aplikacji CRM działa na innej domenie. Teraz nie jestem pewien, jaki jest najlepszy sposób na zrobienie tego.

Myślałem o zawijaniu wartości pól w mojej formie, gdy użytkownik przesyła formularz. Jeśli więc użytkownik wpisze "Homer" w polu "Imię", a kliknięcia prześlą, mój JS zmieni wartość pola na <firstname>Homer</firstname>, a następnie opublikuje dane.

Jeśli to pomaga, używam jQuery po stronie klienta. Myślę, że musi być lepszy sposób, ponieważ moje rozwiązanie zepsułoby się z JS wyłączonym i wydaje się nieco podejrzane, więc gdybyś mógł wskazać mi właściwy kierunek, który byłby niesamowity.

+0

Aby ktoś pomóc, będą musiały wiesz, czego używasz do swojego zaplecza. –

Odpowiedz

3

Najlepszym sposobem, jaki przychodzi mi na myśl, jest przechwycenie akcji formularza i przekształcenie szczegółów formularza w format XML, a następnie przesłanie go na serwer. Istnieje wiele sposobów, aby to zrobić, ale najłatwiej byłoby wdrożyć rozwiązanie za pomocą ram jak jQuery:

Przykładem tej samej rzeczy można znaleźć w Internecie na http://www.docunext.com/...data-to-xml-with-jquery który wykorzystuje 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

Oba linki są martwe! – thomaskonrad

+0

@thomaskonrad Naprawiłem linki (przekierowując do archiwów w drodze powrotnej). Prawdopodobnie niektóre pobrania i inne zasoby mogą nie działać. Daj mi znać, jeśli napotkasz inne problemy. – Sampson

2

Możesz wysłać XML, używając XFORMS. Na przykład: http://www.mozilla.org/projects/xforms/

+0

+1, ale według mojej najlepszej wiedzy nie jest to obsługiwane w większości przeglądarek. –

+1

Nieaktualne od Gecko 19 (Firefox 19/Thunderbird 19/SeaMonkey 2.16) –

8

Publikowanie pliku XML bez wtyczek javascript lub przeglądarki jest niemożliwe. Dwa możliwe formaty publikowania formularzy html to: application/x-www-form-urlencoded i multipart/form-data.

+0

Czy masz na myśli ** możliwe ** w miejsce niemożliwe? – MaxZoom

4

właśnie to do pracy w chromie, kluczem jest posiadanie spację w nazwie obszaru tekstu:

<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

Jeśli kod serwery stronie jest opcja, można użyć skryptu CURL zwyczaj php jako pośrednik przesłać prośbę w dniu do strony trzeciej w rzeczywistym formacie xml. Nie jestem pewien, czy CURL jest dostarczany ze standardową instalacją php, i jeśli nie jest to opcja, prawdopodobnie mógłbyś użyć fsocketopen (choć osobiście uważam, że ta taktyka jest trudniejsza). Ale CURL jest łatwy do zainstalowania i niezwykle użyteczny, ponieważ pozwala PHP wysyłać żądania tak, jakby to była przeglądarka. Różnica, która może Cię zainteresować, polega na tym, że pozwala ci ustawić nagłówek "Content-type: text/xml".

Postaraj się, aby twój formularz html wysłał zwykłe wartości GET lub POST do twojego skryptu php. Następnie poproś, aby ten osobisty skrypt PHP przekonwertował je na format XML oczekiwany przez inną firmę. (Nie zapomnij poprzedzić go z tagiem <?xml version="1.0" encoding="ISO-8859-1"?>, ze cokolwiek atrybut wartości są odpowiednie dla ciebie.), A następnie wysłać go za pomocą tego kodu:

$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); 
Powiązane problemy