http://blagtalkan.ru
http://oktpoisk.ru
http://mysorru.ru/
http://san-okt.ru/
http://pes6evolution.ru/
http://chasikigov.ru
http://serafimsovet.ru
http://filmsgov.ru
http://free-domen.ru
http://fithonda.ru/forums/index.php
http://avtogov.ru
http://www.1001bilet.com.ua/base/on-line/
http://pravilavoini.ru
http://school41ufa.ru
http://rusrav4.ru
Подход Mozilla | Книга AJAX
 

Современные броузеры семейства Mozilla, такие как Firefox и Netsca¬pe, содержат несколько высокоуровневых классов для работы с SOAP, встроенных в реализацию JavaScript этих броузеров. Эти броузеры стремятся заключить базовую функциональность создания запросов 80АР в удобные для работы классы. Как и в предыдущем примере, сначала надо определить функцию perf ormSpecif icOperation():
function performSpecificOperation(sMethod, s0p1, s0p2) {
var oSoapCall = new SOAPCalK); oSoapCall.transportURI = SERVICE.URL; oSoapCall.actionURI = S0AP_ACTION_BASE + "/" + sMethod; var aParams = [];
var oParam = new S0APParameter(s0p1, "op1"); oParam.namespaceURI = SOAP_ACTION_BASE; aParams.push(oParam); oParam = new S0APParameter(s0p2, "op2"); oParam.namespaceURI = SOAP_ACTION_BASE; aParams.push(oParam);
oSoapCall.encode(0, sMethod, SOAP_ACTION_BASE, 0, null,
aParams.length, aParams); var oSerializer = new XMLSerializer(); document.getElementById("txtRequest").value =
oSerializer.serializeToString(oSoapCall.envelope); setUIEnabled(false);
// здесь находится остальной код
}
В этом сценарии проявляются преимущества нескольких вст классов, первый из которых SOAPCall. Этот класс представляет обертку вокруг функциональных возможностей веб-службы и н нает компонент webservice behavior для Internet Explorer. После ния экземпляра SOAPCall устанавливаются два его свойства: tran tURI, содержащее адрес веб-службы, и actionURI, определяющее службы для SOAP и имя метода.
Затем с помощью конструктора SOAPParameter, принимающего имя ■ чение параметра, создаются два параметра. Для каждого из па¬ров определяется URI пространства имен - значение атрибута ta Namespace в разделе schema файла WSDL. Теоретически в этом нет ходимости, но похоже, что классы SOAP в Mozilla разрабатыв основе модели вызова удаленных процедур (RPC), поэтому и н мо выполнение этих дополнительных действий. Оба параметра ляются в массив aParams. Метод encode() подготавливает все к выполнению вызова. Этот метод принимает семь аргументов. П аргумент - это версия SOAP,1 здесь допускается передавать знач* если версия SOAP не имеет никакого значения. Второй аргумент -метода и третий - значение атрибута targetNamespace из раздела; в файле WSDL. В следующем аргументе передается количество, нительных заголовков, которые необходимо передать в запросе (в ном случае не задаются). Затем следует массив заголовков (здесь зано значение null). Последние два аргумента содержат кол* объектов типа SOAPParameter, передаваемых методу, и собственно метры.
Затем необходимо отправить запрос. Это можно сделать с помо
TOflaasyncInvoke():
function performSpecificOperation(sMethod, s0p1, s0p2) {
var oSoapCall = new SOAPCallO; oSoapCall.transportURI = SERVICEJRL; oSoapCall.actionURI = SOAP_ACTION_BASE + "/" + sMethod; var aParams = [];
Очевидно, даже версия метода, вызываемого посредством RPC, о чем рилось выше и что согласуется с предположением, высказанным об использовании RPC. - Примеч. науч. ред.
push(oParam); oParam = new S0APParameter(s0p2, "op2"); oParam.namespaceURI = SOAP_ACTION_BASE; aPa rams.push(oPa ram);
oSoapCall.encode(0, sMethod, SOAP_ACTION_BASE, 0, null,
aParams.length, aParams); var oSerializer = new XMLSerializerO; document.getElementById("txtRequest").value =
oSerializer.serializeToString(oSoapCall.envelope); setUIEnabled(false);
V' oSoapCall.asyncInvoke(
*" "• function (oResponse, oCall, iError)'
{
.var oResult = handleResponse(oResponse, oCall, iError);
g, showSoapResults(oResult);

}
Метод asyncInvoke() принимает всего один аргумент - функцию обрат¬ного вызова (handleResponse()). В эту функцию передается три аргумен¬та; объект SOAPResponse, указатель на оригинальный запрос SOAP (для отслеживания одновременных вызовов, если это потребуется) и код ошибки:
function handleResponse(oResponse, oCall, iError)
{
setUIEnabled(true); if (iError != 0) {
alert("Неопознанная ошибка."); return false;
}
else {
var oSerializer = new XMLSerializerO; document.getElementById("txtResponse"). value =
oSerializer.serializeToString(oResponse.envelope); var oFault = oResponse.fault; if (oFault != null) {
var sName = oFault.faultCode; var sSummary = oFault.faultString; alert("0tiM6i + "дополнительная информация в области" + " сообщений внизу страницы."); return false;
aParams.length, aParams); var oSerializer = new XMLSerializer(); document.getElementById("txtRequest").value =
oSerializer.serializeToString(oSoapCall. envelope); setUIEnabled(false);
// здесь находится остальной код
}
В этом сценарии проявляются преимущества нескольких вс классов, первый из которых SOAPCall. Этот класс представляет обертку вокруг функциональных возможностей веб-службы и нает компонент webservice behavior для Internet Explorer. После ния экземпляра SOAPCall устанавливаются два его свойства: tr tURI, содержащее адрес веб-службы, и actionURI, определяющее службы для SOAP и имя метода.
Затем с помощью конструктора SOAPParameter, принимающего имя чение параметра, создаются два параметра. Для каждого из ров определяется URI пространства имен - значение атрибута Namespace в разделе schema файла WSDL. Теоретически в этом нет ходимости, но похоже, что классы SOAP в Mozilla разрабаты основе модели вызова удаленных процедур (RPC), поэтому и н мо выполнение этих дополнительных действий. Оба параметра ляются в массив aParams. Метод encodeO подготавливает все к выполнению вызова. Этот метод принимает семь аргументов, аргумент - это версия SOAP, здесь допускается передавать зна" если версия SOAP не имеет никакого значения. Второй аргумент метода и третий - значение атрибута targetNamespace из раздела в файле WSDL. В следующем аргументе передается количество нительных заголовков, которые необходимо передать в запросе ( ном случае не задаются). Затем следует массив заголовков (зд< зано значение null). Последние два аргумента содержат ко, объектов типа SOAPParameter, передаваемых методу, и собственно метры.
Затем необходимо отправить запрос. Это можно сделать с помо
TOflaasyncInvokeQ:
function performSpecificOperation(sMethod, s0p1, s0p2) {
var oSoapCall = new SOAPCallO; oSoapCall.transportURI = SERVICEJJRL; oSoapCall.actionURI = SOAP_ACTION_BASE + 7" + sMethod; var aParams = [];
var oParam = new S0APParameter(s0p1, "op1");

oParam.namespaceURI = SOAP_ACTION_BASE; аРа rams.push(оРа ram); oParam = new S0APParameter(s0p2, "op2"); oParam.namespaceURI = SOAP_ACTION_BASE; aParams.push(oParam);
oSoapCall.encode(0, sMethod, SOAP_ACTION_BASE, 0, null,
aParams.length, aParams); var oSerializer = new XMLSerializerO; document.getElementById("txtRequest").value =
oSerializer.serializeToString(oSoapCall. envelope); setUIEnabled(false);
oSoapCall.asyndnvoke(
function (oResponse, oCall, iError)
►var oResult<= handleResponse(oResponse, oCall, iError); showSoapResults(oResult);

}
Метод asyndnvoke() принимает всего один аргумент - функцию обрат¬ного вызова (handleResponse()). В эту функцию передается три аргумен¬та: объект SOAPResponse, указатель на оригинальный запрос SOAP (для «слеживания одновременных вызовов, если это потребуется) и код сшибки:
function handleResponse(oResponse, oCall, iError)
{
setUIEnabled(true); if (iError != 0) {
alert("Неопознанная ошибка."); return false;
>
else <
var oSerializer = new XMLSerializerO; document.getElementById("txtResponse").value =
oSerializer.serializeToString(oResponse.envelope); var oFault = oResponse.fault; if (oFault != null) {
var sName = oFault.faultCode; var sSummary = oFault.faultString; alert("0uin6i.
В классе SoapResponse существует метод с именем getParameters, ко теоретически позволяет извлекать параметры более элегантным < Но похоже на то, что он не работает в методике обмена документа этому необходимо исследовать структуру soap; Body более низкоуров примитивными методами.