2010-01-18 31 views
7

tôi phải gửi dữ liệu từ dạng HTML của tôi đến máy chủ ở định dạng xml, một cái gì đó như:Làm cách nào để đăng XML lên máy chủ thông qua biểu mẫu HTML?

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

Tất cả tôi biết là nó đi đến một trong những ứng dụng CRM chạy trên tên miền khác nhau. Bây giờ tôi không chắc chắn cách tốt nhất để làm điều này là gì.

Tôi đã nghĩ đến việc chỉ gói các giá trị của các trường trong biểu mẫu của tôi khi người dùng gửi biểu mẫu. Vì vậy, nếu người dùng nhập "Homer" trong trường "firstname" và nhấp chuột gửi, JS của tôi sẽ thay đổi giá trị của trường thành <firstname>Homer</firstname> và sau đó đăng dữ liệu.

Nếu nó giúp tôi đang sử dụng jQuery ở phía máy khách. Tôi nghĩ rằng phải có cách tốt hơn như giải pháp của tôi sẽ phá vỡ với JS bị vô hiệu hóa và có vẻ hơi tinh ranh vì vậy nếu bạn có thể chỉ cho tôi đi đúng hướng đó sẽ là tuyệt vời.

+0

Để ai đó giúp bạn, họ sẽ cần phải biết những gì bạn đang sử dụng cho chương trình phụ trợ của mình. –

Trả lời

3

Cách tốt nhất tôi có thể nghĩ là chặn hành động gửi biểu mẫu và chuyển đổi chi tiết biểu mẫu sang định dạng XML, sau đó gửi nó tới máy chủ. Có rất nhiều cách để làm điều này, nhưng đơn giản nhất sẽ được thực hiện một giải pháp thông qua một khuôn khổ như jQuery:

Một ví dụ về điều này rất có thể được tìm thấy trực tuyến tại http://www.docunext.com/...data-to-xml-with-jquery trong đó sử dụng các 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

Cả hai liên kết đều đã chết! – thomaskonrad

+0

@thomaskonrad Tôi đã sửa các liên kết (bằng cách chuyển hướng đến lưu trữ trên đường dẫn). Có thể một số nội dung tải xuống và các tài nguyên khác có thể không hoạt động. Hãy cho tôi biết nếu bạn gặp phải bất kỳ vấn đề nào khác. – Sampson

2

Bạn có thể gửi XML bằng cách sử dụng XFORMS. Ví dụ: xem: http://www.mozilla.org/projects/xforms/

+0

+1 nhưng điều này không được hỗ trợ trên hầu hết các trình duyệt theo kiến ​​thức tốt nhất của tôi. –

+1

Lỗi thời kể từ Gecko 19 (Firefox 19/Thunderbird 19/SeaMonkey 2.16) –

8

Không thể đăng XML mà không có trình cắm javascript hoặc trình duyệt. Hai định dạng có thể đăng của các biểu mẫu html là application/x-www-form-urlencodedmultipart/form-data.

+0

Ý của bạn là ** có thể ** thay cho điều không thể? – MaxZoom

4

tôi chỉ có này để làm việc trong chrome, chìa khóa là có không gian trống trong tên vùng văn bản:

<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

Nếu mã server-side là một lựa chọn, bạn có thể sử dụng một CURL kịch bản tùy chỉnh php như một trung gian để chuyển tiếp yêu cầu của bạn cho bên thứ ba ở định dạng xml thực tế. Tôi không chắc chắn nếu CURL đi kèm với một cài đặt php tiêu chuẩn, và nếu nó không phải là một lựa chọn, bạn có thể sử dụng fsocketopen thay vào đó (mặc dù cá nhân tôi nghĩ rằng chiến thuật là khó khăn hơn). Nhưng CURL là dễ dàng, đủ để cài đặt và cực kỳ hữu ích cho về cơ bản cho phép php để gửi yêu cầu như thể nó là một trình duyệt. Sự khác biệt mà bạn có thể quan tâm ở đây, là nó thực sự cho phép bạn đặt tiêu đề 'Content-type: text/xml'.

Vì vậy, biểu mẫu html của bạn sẽ gửi một số giá trị GET hoặc POST thông thường đến tập lệnh php của bạn. Sau đó, có kịch bản php cá nhân chuyển đổi chúng thành định dạng XML mà bên thứ ba đang mong đợi. (Đừng quên đặt trước nó với thẻ <?xml version="1.0" encoding="ISO-8859-1"?>, với bất kỳ giá trị thuộc tính nào phù hợp với bạn.) Và sau đó gửi đi thông qua mã này:

$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); 
Các vấn đề liên quan