2008-10-16 40 views

cevap

17

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.

+0

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

2

XMLHttpRequest nesnesini kullanabilirsiniz, ancak herhangi bir JavaScript çerçevesini kullanmak istemediğinizden, SOAP zarflarını kendiniz mareşal ve kısaltmanız gerekir.

+1

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

5

Hizmet, alan adınızda barındırılıyorsa XMLHttpRequest oluşturabilirsiniz. Değilse, alanlar arası sorunlarınız olacaktır.

+0

s/could/will/yanılmıyorsam. –

+0

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

+0

Özellikle "alanlar arası sorunlar" ile ne demek istiyorsun? –

0

Ayrıca XmlHttpRequest nesnesini kullanma hakkında güzel bir bilgi sayfası için XML HTTP Request'u da işaretleyin.

0

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

0

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); 
    } 
} 
+0

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

İlgili konular