Использование веб-службы с использованием Javascript

Есть ли способ использовать веб-сервис с использованием JavaScript? Я ищу встроенный способ сделать это, использование фреймворка JavaScript не является вариантом.

Ответы

Ответ 1

Вы можете использовать веб-службу, используя JavaScript, изначально используя объект XmlHttpRequest. Однако экземпляр этого объекта изменяется между браузерами. Например, Firefox и IE 7+ позволяют создавать экземпляр в качестве встроенного JavaScript-объекта, но IE6 требует, чтобы вы создавали его как элемент управления ActiveX.

Из-за этого я бы рекомендовал использовать библиотеку абстракции, такую ​​как jQuery. Если это не вариант, то абстрагируйте создание в метод factory и проверьте версию браузера.

Чтобы использовать это для вызова веб-службы, вы просто создаете экземпляр объекта, а затем вызываете его методом open(). Я рекомендую это сделать async, чтобы поддерживать пользовательский интерфейс. При вызове async вы получите обратные вызовы к указанному асинхронному методу, который укажет статус запроса. Когда состояние 4 (загружено), вы можете взять данные ответа и затем обработать его.

Как вы обрабатываете данные, будет зависеть от того, что это такое, если это JSON, то вы можете запустить его с помощью JavaScript eval(), но это имеет некоторые последствия для безопасности. Если это XML, вы можете использовать XML DOM для его обработки.

Подробнее о объекте XMLHttpRequest см. Wikipedia.

Ответ 2

Вы можете создать XMLHttpRequest, если служба размещена в вашем домене. Если нет, у вас будут проблемы с междоменным доступом.

Ответ 3

Вы можете использовать объект XMLHttpRequest, но поскольку вы не хотите использовать какие-либо фреймворки JavaScript, вам придется маршалировать и самостоятельно отключите конверты SOAP.

Ответ 4

Также проверьте XML HTTP Request для хорошей информационной страницы об использовании объекта XmlHttpRequest.

Ответ 5

В javascript имеется небольшая библиотека, которая может использоваться как клиент XML-SOAP. Я не знаю, работает ли он во всех браузерах, но это может помочь вам. Вы можете найти его здесь

Ответ 6

Это сработало. Он старый (проверка для Netscape), был написан до того, как все инструменты Ajax вышли. Вам нужно обрабатывать разные браузеры - в основном, IE делает это в одну сторону, а все остальные делают это по-другому.

// 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);
  }
}