Использование веб-службы с использованием 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);
}
}