Có cách nào để sử dụng dịch vụ web bằng JavaScript không? Tôi đang tìm cách tích hợp để làm điều đó, sử dụng một khung JavaScript không phải là một lựa chọn.Sử dụng dịch vụ web bằng cách sử dụng Javascript
Trả lời
Bạn có thể sử dụng dịch vụ web bằng JavaScript nguyên bản bằng cách sử dụng đối tượng XmlHttpRequest. Tuy nhiên instantiating đối tượng này khác nhau giữa các trình duyệt. Ví dụ Firefox và IE 7+ cho phép bạn khởi tạo nó như một đối tượng JavaScript nguyên gốc nhưng IE6 yêu cầu bạn khởi tạo nó như một điều khiển ActiveX.
Vì lý do này, tôi khuyên bạn nên sử dụng thư viện trừu tượng như jQuery. Nếu đó không phải là một tùy chọn thì hãy tóm tắt việc tạo thành phương thức nhà máy và kiểm tra phiên bản trình duyệt.
Để sử dụng tính năng này để thực hiện dịch vụ web, bạn chỉ cần khởi tạo đối tượng và sau đó gọi đó là phương thức open(). Tôi khuyên bạn nên thực hiện điều này là không đồng bộ để giữ cho giao diện người dùng phản hồi. Khi được gọi là async, bạn sẽ nhận được các cuộc gọi lại đến phương thức async được chỉ định của bạn để chỉ ra trạng thái của yêu cầu. Khi trạng thái là 4 (nạp), bạn có thể lấy dữ liệu đáp ứng và sau đó xử lý nó.
Cách bạn xử lý dữ liệu sẽ phụ thuộc vào nó là gì, nếu đó là JSON thì bạn có thể chạy nó thông qua phương thức eval() của JavaScript nhưng có một số tác động bảo mật. Nếu đó là XML, bạn có thể sử dụng DOM XML để xử lý nó.
Xem Wikipedia để biết thêm thông tin về đối tượng XMLHttpRequest.
Bạn có thể sử dụng đối tượng XMLHttpRequest, nhưng vì bạn không muốn sử dụng bất kỳ khung JavaScript nào, bạn sẽ phải sắp xếp và tự sắp xếp các phong bì SOAP.
Bạn chỉ phải lo lắng về phong bì SOAP nếu đó là dịch vụ web SOAP. Một số dịch vụ web an toàn chỉ có thể được gọi và kết quả được đọc mà không cần xử lý trước. – brien
Bạn có thể tạo XMLHttpRequest nếu dịch vụ được lưu trữ trong miền của bạn. Nếu không, bạn sẽ có các vấn đề tên miền chéo.
s/có thể/sẽ/nếu tôi không nhầm. –
Vâng, bạn nói đúng. Bất cứ khi nào các công cụ tên miền chéo xuất hiện, tôi nhận được một chút không chắc chắn về những quy tắc chính xác là gì. Tôi chỉ cố gắng tránh những vấn đề đó hoàn toàn;) – brien
Ý của bạn là gì, cụ thể là bởi "các vấn đề liên quan đến tên miền chéo"? –
Đồng thời kiểm tra XML HTTP Request để biết trang thông tin tốt đẹp về cách sử dụng đối tượng XmlHttpRequest.
Có một thư viện nhỏ được viết bằng javascript có thể được sử dụng làm ứng dụng khách XML-SOAP. Tôi không biết nếu nó hoạt động trên tất cả các trình duyệt nhưng nó có thể giúp bạn ra ngoài. Bạn có thể tìm thấy nó here
Điều này đã hiệu quả. Nó cũ (kiểm tra cho Netscape), được viết trước khi tất cả các công cụ Ajax xuất hiện. Bạn phải xử lý các trình duyệt khác nhau - về cơ bản, IE thực hiện theo một cách, và mọi người khác làm theo cách khác.
// javascript global variables
var soapHeader = '<?xml version=\"1.0\"?>'
+ '<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"'
+ ' SOAP-ENV:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\"'
+ ' xmlns:xsi=\"http://www.w3.org/1999/XMLSchema-instance\"'
+ ' xmlns:xsd=\"http://www.w3.org/1999/XMLSchema\"'
+ '>'
+ '<SOAP-ENV:Header/>'
+ '<SOAP-ENV:Body>';
var soapFooter = '</SOAP-ENV:Body>'
+ '</SOAP-ENV:Envelope>';
var destinationURI = '/webservices/websalm';
var actionURI = '';
function callWebService(nsCallback,ieCallback,parms) {
try
{
// Create XmlHttpRequest obj for current browser = Netscape or IE
if (navigator.userAgent.indexOf('Netscape') != -1)
{
SOAPObject = new XMLHttpRequest();
SOAPObject.onload = nsCallback;
} else { //IE
SOAPObject = new ActiveXObject('Microsoft.XMLHTTP');
SOAPObject.onreadystatechange = ieCallback;
}
SOAPObject.open('POST', destinationURI, true);
// Set 2 Request headers, based on browser
if (actionURI == '') {
SOAPObject.setRequestHeader('SOAPAction', '\"\"');
} else { SOAPObject.setRequestHeader('SOAPAction', actionURI);
}
SOAPObject.setRequestHeader('Content-Type', 'text/xml');
// Compose the Request body from input parameter + global variables
var requestBody = soapHeader + parms + soapFooter
// Send, based on browser
if (navigator.userAgent.indexOf('Netscape') != -1)
{
SOAPObject.send(new DOMParser().parseFromString(requestBody,'text/xml'));
} else {
SOAPObject.send(requestBody);
}
} catch (E)
{
alert('callWebService exception: ' + E);
}
}
Chỉ tò mò thôi. JavaScript có khả năng gọi API/dịch vụ web trước khi XHR nổi bật vào ngôn ngữ hoặc cho đến thời điểm đó có nghĩa là * chỉ * đối với thao tác DOM trong các trang HTML không? – RBT
- 1. Xác thực dịch vụ web bằng cách sử dụng OpenID
- 2. Dịch vụ web REST Java bằng cách sử dụng protobuf
- 3. Sử dụng dịch vụ web bằng cách sử dụng giao diện khác
- 4. Sử dụng dịch vụ web REST XML
- 5. Dịch vụ web với CXF: Cách sử dụng ResponseWrapper?
- 6. Cách gọi dịch vụ web bằng cách sử dụng vbscript (đồng bộ)?
- 7. Cách sử dụng dịch vụ web ColdFusion với dotnet
- 8. Cách sử dụng dịch vụ Web RESTful trong Lotus Notes
- 9. Tiêu thụ dịch vụ WCF bằng cách sử dụng jQuery
- 10. cách tạo thông báo đẩy tùy chỉnh bằng cách sử dụng dịch vụ web asp.net?
- 11. SharePoint - Cách chèn các mục mới bằng cách sử dụng dịch vụ web danh sách?
- 12. Cách kiểm tra dịch vụ web bằng cách sử dụng lệnh curl
- 13. cách gọi dịch vụ web bằng cách sử dụng lược đồ ủy quyền NTLM?
- 14. Sử dụng dịch vụ Google +1 mà không cần JavaScript
- 15. Khi nào thì không nên sử dụng dịch vụ web?
- 16. Sử dụng dịch vụ RESTful qua https với chứng chỉ bằng cách sử dụng Java
- 17. Sử dụng Dịch vụ web trong C# Windows App
- 18. Sử dụng phản chiếu để gọi dịch vụ web ASP.NET
- 19. Dịch vụ web và ứng dụng web
- 20. Đọc dịch vụ web bằng cách sử dụng PHP với GUID và không gian tên
- 21. Tạo Dịch vụ Web Java bằng cách sử dụng Google AppEngine
- 22. Yêu cầu dịch vụ web SoapUI bằng cách sử dụng Chứng chỉ khóa công khai
- 23. đọc email bằng cách sử dụng dịch vụ trao đổi web
- 24. Làm thế nào để thực hiện một dịch vụ Web REST bằng cách sử dụng Akka?
- 25. Android với dịch vụ web WCF bằng cách sử dụng ksoap2 - lỗi SoapFault - lỗi: ‘a: ActionNotSupported’
- 26. Dịch vụ web Java Async REST sử dụng Jersey?
- 27. Sử dụng Play 2.0 để tạo một dịch vụ web
- 28. Sử dụng ASP.NET MVC làm dịch vụ Web
- 29. sử dụng dịch vụ ntp
- 30. Sử dụng dịch vụ REST từ WCF
Chỉ tò mò thôi. JavaScript có khả năng gọi API/dịch vụ web trước khi XHR nổi bật vào ngôn ngữ hoặc cho đến thời điểm đó có nghĩa là * chỉ * đối với thao tác DOM trong các trang HTML không? – RBT