JavaScript kullanarak bir web hizmetini tüketmenin bir yolu var mı? Bunu yapmak için yerleşik bir yol arıyorum, bir JavaScript çerçevesi kullanmak bir seçenek değildir.Javascript kullanarak bir Web hizmetini tüketme
cevap
XmlHttpRequest nesnesini kullanarak yerel olarak JavaScript kullanarak bir web hizmeti tüketebilirsiniz. Ancak bu nesneyi başlatmak, tarayıcılar arasında değişir. Örneğin Firefox ve IE 7+, bunu yerel bir JavaScript nesnesi olarak başlatmanızı sağlar ancak IE6 bunu bir ActiveX denetimi olarak başlatmanızı gerektirir.
Bunun için jQuery gibi bir soyutlama kitaplığı kullanmanızı öneririz. Bu bir seçenek değilse, oluşturmayı bir fabrika yöntemiyle soyutlayın ve tarayıcı sürümünü kontrol edin.
Bunu bir web servisi araması yapmak için kullanmak amacıyla, nesneyi basitçe başlatıp, ardından open() yöntemini çağırın. Bu UI duyarlı tutmak için uyumsuz yapılır. Zaman uyumsuz olarak çağrıldığında, isteğin durumunu belirten belirtilen eşzamansız yönteme geri çağrıları alırsınız. Durum 4 (yüklenen) olduğunda, yanıt verisini alabilir ve daha sonra işleyebilirsiniz.
Verileri nasıl işlediğinize bağlı olarak değişir, eğer JSON ise JavaScript'in eval() yöntemiyle çalıştırabilirsiniz, ancak bazı güvenlik sonuçları vardır. XML ise, işlemek için XML DOM kullanabilirsiniz.
XMLHttpRequest nesnesi hakkında daha fazla bilgi için Wikipedia adresine bakın.
XMLHttpRequest nesnesini kullanabilirsiniz, ancak herhangi bir JavaScript çerçevesini kullanmak istemediğinizden, SOAP zarflarını kendiniz mareşal ve kısaltmanız gerekir.
SOAP web hizmeti varsa SOAP zarfları hakkında endişelenmeniz yeterlidir. Bazı huzurlu web servisleri sadece çağrılabilir ve sonuçlar ön işleme olmadan okunabilir. – brien
Hizmet, alan adınızda barındırılıyorsa XMLHttpRequest oluşturabilirsiniz. Değilse, alanlar arası sorunlarınız olacaktır.
s/could/will/yanılmıyorsam. –
Evet, haklısın. Herzaman alan-arası malzeme ortaya çıkar, kesin kuralların ne olduğundan emin değilim. Sadece bu sorunlardan kaçınmaya çalışıyorum;) – brien
Özellikle "alanlar arası sorunlar" ile ne demek istiyorsun? –
Ayrıca XmlHttpRequest nesnesini kullanma hakkında güzel bir bilgi sayfası için XML HTTP Request'u da işaretleyin.
XML-SOAP istemcisi olarak kullanılabilen javascript ile yazılmış küçük bir kitaplık var. Tüm tarayıcılarda işe yarayıp yaramadığını bilmiyorum ama size yardımcı olabilir. Bunu çalıştırabilirsiniz here
Bu çalıştı. Eski (Netscape için kontrol), tüm Ajax araçlarının çıkmasından önce yazılmıştır. Farklı tarayıcılarla uğraşmak zorunda kalıyorsunuz - temelde, IE bunu bir şekilde yapıyor ve herkes bunu başka şekilde yapıyor.
// 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);
}
}
Sadece merak ediyorum. JavaScript, XHR'nin dili kullanmadan önce web API'lerini/hizmetlerini çağırabiliyor muydu ya da o zamana kadar HTML sayfalarında DOM manipulasyonu için * sadece * belirtildi? – RBT
- 1. Ajax ile REST hizmetini tüketme - Aynı başlangıç ilkesi
- 2. Vertx kullanarak REST API'lerini Çağırma/Çağırma/Tüketme
- 3. Sınıf kitaplığında bir web referansı tüketme (C# /. NET)
- 4. Azure ML web hizmetini JS
- 5. OData web hizmetini kullanarak CRM durumunun durumunu değiştirin
- 6. İki web hizmetini çoklu iş parçacığı kullanarak nasıl topluyorum?
- 7. Stres için bir bulut hizmetini kullanma Web uygulamasını test etme
- 8. Web hizmetini tomcat'e program aracılığıyla yayınlama
- 9. Web hizmetini aramak için C++ 'dan başlayan
- 10. Apache CXF web hizmetini Glassfish'e dağıtma
- 11. JavaScript kullanarak bir web sunucusunda bir dosya nasıl getirilir?
- 12. bir scala Iterator öğesinden öğe tüketme
- 13. Bir seferde bir bayt okumadan bir HTTP akışını tüketme
- 14. , WSDL açıklamasının olması durumunda bir web hizmetini nasıl arayabilirim?
- 15. Web hizmetini belirli bir camfish bağlantı noktasına nasıl bağlarım?
- 16. ASP.NET'te SOAP yoluyla bir web hizmetini çağırmanın en kolay yolu
- 17. JavaScript kullanarak bir IFRAME oluşturma
- 18. Bir Android Hizmetini
- 19. Twitter web sitemden twitter tweet kullanarak doğrudan javascript kullanarak
- 20. Inno Setup'ı kullanarak Windows hizmetini yükseltme
- 21. Jasmine Mock for valans hizmetini kullanarak
- 22. PHP'den asp.net web hizmetini birden çok parametreyle arayın
- 23. Sabun web hizmetini wso2 ESB'de Rest haline dönüştürme ESB
- 24. HTTP POST/GET istekleri için ASP.NET ASMX web hizmetini etkinleştir
- 25. Bir ChromeDriver Hizmetini nasıl kapatırsınız?
- 26. 100% Javascript Web Framework
- 27. Bir bookmarklet kullanarak harici bir javascript çalıştıramıyor
- 28. .Net Framework/Java kullanarak bir SQLite DB oluşturmak ve Web Hizmetini kullanarak DB'yi iPhone'a itmek mümkün mü?
- 29. Yükleme hizmetini bir tepki.js projesine nasıl aktarabilirim?
- 30. Web Özellik Hizmetini Dönüştürme Coğrafi İşaretleme Dili verileri R
Sadece merak ediyorum. JavaScript, XHR'nin dili kullanmadan önce web API'lerini/hizmetlerini çağırabiliyor muydu ya da o zamana kadar HTML sayfalarında DOM manipulasyonu için * sadece * belirtildi? – RBT