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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать объект XMLHttpRequest, но поскольку вы не хотите использовать какие-либо инфраструктуры JavaScript, вам придется самостоятельно маршалировать и демаршалировать конверты SOAP.
Вы можете создать XMLHttpRequest, если служба размещена в вашем домене. В противном случае у вас возникнут проблемы с междоменными доменами.
s / could / will / если не ошибаюсь.
Да, ты прав. Каждый раз, когда возникает вопрос о междоменном использовании, я немного не понимаю, каковы точные правила. Я просто стараюсь полностью избегать этих проблем;)
Что конкретно вы имеете в виду под «междоменными проблемами»?
Вы можете использовать веб-службу с помощью JavaScript изначально, используя объект XmlHttpRequest. Однако создание экземпляра этого объекта зависит от браузера. Например, Firefox и IE 7+ позволяют создавать его как собственный объект JavaScript, но IE6 требует, чтобы вы создавали его как элемент управления ActiveX.
По этой причине я бы рекомендовал использовать библиотеку абстракций, такую как jQuery. Если это не вариант, абстрагируйте создание до фабричного метода и проверьте версию браузера.
Чтобы использовать это для вызова веб-службы, вы просто создаете экземпляр объекта, а затем вызываете его метод open (). Я рекомендую сделать это асинхронно, чтобы пользовательский интерфейс оставался отзывчивым. При вызове async вы получите обратные вызовы для указанного асинхронного метода, который укажет статус запроса. Когда статус равен 4 (загружен), вы можете взять данные ответа и затем обработать их.
То, как вы обрабатываете данные, будет зависеть от того, что это такое. Если это JSON, вы можете запустить его с помощью метода eval () JavaScript, но это имеет некоторые последствия для безопасности. Если это XML, вы можете использовать XML DOM для его обработки.
См. Википедия для получения дополнительной информации об объекте XMLHttpRequest.
Просто любопытно. Был ли JavaScript способен вызывать веб-API / сервисы до того, как XHR был включен в язык, или до этого времени он предназначался для манипулирования DOM на страницах HTML как Только?
Также проверьте XML HTTP-запрос на наличие хорошей информационной страницы об использовании объекта XmlHttpRequest.
Существует небольшая библиотека, написанная на javascript, которую можно использовать в качестве клиента XML-SOAP. Я не знаю, работает ли он во всех браузерах, но может вам помочь. Вы можете найти это здесь
Это сработало. Он старый (проверяется на 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);
}
}
Просто любопытно. Был ли JavaScript способен вызывать веб-API / сервисы до того, как XHR был включен в язык, или до этого времени он предназначался для манипулирования DOM на страницах HTML как Только?
Вам нужно беспокоиться только о конвертах SOAP, если это веб-сервис SOAP. Некоторые успокаивающие веб-службы можно просто вызвать и прочитать результаты без какой-либо предварительной обработки.