Pytanie Korzystanie z usługi sieci Web przy użyciu Javascript


Czy istnieje sposób na korzystanie z usługi WWW przy użyciu JavaScript? Poszukuję wbudowanego sposobu, aby to zrobić, korzystanie z architektury JavaScript nie jest opcją.


14
2017-10-16 10:35


pochodzenie




Odpowiedzi:


Możesz korzystać z usługi WWW za pomocą JavaScript natywnie za pomocą obiektu XmlHttpRequest. Jednak tworzenie tego obiektu różni się w zależności od przeglądarki. Na przykład Firefox i IE 7+ pozwalają na utworzenie instancji jako natywnego obiektu JavaScript, ale IE6 wymaga, aby utworzyć instancję jako kontrolkę ActiveX.

Z tego powodu zalecam używanie biblioteki abstrakcji, takiej jak jQuery. Jeśli to nie jest opcja, wówczas zamień kreację na metodę fabryczną i sprawdź wersję przeglądarki.

Aby użyć tego do wywołania usługi sieciowej, po prostu wykonaj instancję obiektu, a następnie wywołaj metodę open (). Polecam to zrobić asynchronicznie, aby zachować responsywność interfejsu użytkownika. Po wywołaniu asynchronizacji otrzymasz wywołania zwrotne do określonej metody asynchronicznej, która wskaże status żądania. Gdy status jest 4 (załadowany), możesz pobrać dane odpowiedzi, a następnie je przetworzyć.

Sposób przetwarzania danych zależy od tego, co to jest, jeśli jest to JSON, możesz uruchomić go za pomocą metody eval () JavaScript, ale ma to pewne implikacje dla bezpieczeństwa. Jeśli jest to XML, możesz użyć XML DOM do jego przetworzenia.

Widzieć Wikipedia aby uzyskać więcej informacji na temat obiektu XMLHttpRequest.


17
2017-10-16 10:44



Po prostu ciekawy. Czy JavaScript był zdolny do wywoływania webowych API / usług zanim XHR pojawił się w tym języku lub do tego czasu był przeznaczony tylko do manipulacji DOM na stronach HTML? - RBT


Możesz utworzyć XMLHttpRequest jeśli usługa jest hostowana w Twojej domenie. Jeśli nie, będziesz mieć problemy z wieloma domenami.


5
2017-10-16 10:44



s / could / will / jeśli się nie mylę. - Chris Vest
Tak, masz rację. W każdym momencie, gdy pojawia się wiele domen, nie mam pewności co do dokładnych reguł. Po prostu staram się całkowicie ominąć te problemy;) - brien
Co masz na myśli przez "problemy z wieloma domenami"? - Anderson Green


Możesz użyć XMLHttpRequest obiekt, ale ponieważ nie chcesz używać żadnych frameworków JavaScript, będziesz musiał osobiście zarządzić i rozpakować koperty SOAP.


2
2017-10-16 10:42



Trzeba tylko martwić się o koperty SOAP, jeśli jest to usługa sieciowa SOAP. Niektóre spokojne usługi sieciowe można po prostu wywoływać, a wyniki czytać bez żadnego wstępnego przetwarzania. - brien


Sprawdź również Żądanie XML HTTP dla ładnej strony informacyjnej o korzystaniu z obiektu XmlHttpRequest.


0
2017-10-16 10:46





Istnieje mała biblioteka napisana w javascript, która może być używana jako klient XML-SOAP. Nie wiem, czy działa we wszystkich przeglądarkach, ale może ci pomóc. Możesz to znaleźć tutaj


0
2017-10-16 11:30





To zadziałało. Jest stary (sprawdzanie Netscape), został napisany zanim wszystkie narzędzia Ajaxa wyszły. Musisz obsługiwać różne przeglądarki - w zasadzie IE robi to w jedną stronę, a wszyscy inni robią to w inny sposób.

// 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
2017-10-16 11:38



Po prostu ciekawy. Czy JavaScript był zdolny do wywoływania webowych API / usług zanim XHR pojawił się w tym języku lub do tego czasu był przeznaczony tylko do manipulacji DOM na stronach HTML? - RBT