Использование веб-службы с использованием Javascript - PullRequest
14 голосов
/ 16 октября 2008

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

Ответы [ 6 ]

17 голосов
/ 16 октября 2008

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

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

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

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

См. Википедия для получения дополнительной информации об объекте XMLHttpRequest.

5 голосов
/ 16 октября 2008

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

2 голосов
/ 16 октября 2008

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

0 голосов
/ 16 октября 2008

Это сработало. Он старый (проверка на 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);
  }
}
0 голосов
/ 16 октября 2008

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

0 голосов
/ 16 октября 2008

Также проверьте XML HTTP-запрос , чтобы получить хорошую страницу информации об использовании объекта XmlHttpRequest.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...