使用Javascript的最简单的SOAP示例是什么?
为了尽可能有用,答案应该是:
具有功能性(换句话说就是实际工作) 发送至少一个可以在代码的其他地方设置的参数 处理至少一个可以在代码的其他地方读取的结果值 适用于大多数现代浏览器版本 在不使用外部库的情况下,尽可能地清晰和简短
使用Javascript的最简单的SOAP示例是什么?
为了尽可能有用,答案应该是:
具有功能性(换句话说就是实际工作) 发送至少一个可以在代码的其他地方设置的参数 处理至少一个可以在代码的其他地方读取的结果值 适用于大多数现代浏览器版本 在不使用外部库的情况下,尽可能地清晰和简短
当前回答
有人试过吗?https://github.com/doedje/jquery.soap
似乎很容易实现。
例子:
$.soap({
url: 'http://my.server.com/soapservices/',
method: 'helloWorld',
data: {
name: 'Remy Blom',
msg: 'Hi!'
},
success: function (soapResponse) {
// do stuff with soapResponse
// if you want to have the response as JSON use soapResponse.toJSON();
// or soapResponse.toString() to get XML string
// or soapResponse.toXML() to get XML DOM
},
error: function (SOAPResponse) {
// show error
}
});
会导致
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<helloWorld>
<name>Remy Blom</name>
<msg>Hi!</msg>
</helloWorld>
</soap:Body>
</soap:Envelope>
其他回答
有人试过吗?https://github.com/doedje/jquery.soap
似乎很容易实现。
例子:
$.soap({
url: 'http://my.server.com/soapservices/',
method: 'helloWorld',
data: {
name: 'Remy Blom',
msg: 'Hi!'
},
success: function (soapResponse) {
// do stuff with soapResponse
// if you want to have the response as JSON use soapResponse.toJSON();
// or soapResponse.toString() to get XML string
// or soapResponse.toXML() to get XML DOM
},
error: function (SOAPResponse) {
// show error
}
});
会导致
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<helloWorld>
<name>Remy Blom</name>
<msg>Hi!</msg>
</helloWorld>
</soap:Body>
</soap:Envelope>
浏览器处理XMLHttpRequest的方式有很多怪癖,这段JS代码可以在所有浏览器上工作: https://github.com/ilinsky/xmlhttprequest
这段JS代码将XML转换为易于使用的JavaScript对象: http://www.terracoder.com/index.php/xml-objectifier
上面的JS代码可以包含在页面中,以满足您没有外部库的需求。
var symbol = "MSFT";
var xmlhttp = new XMLHttpRequest();
xmlhttp.open("POST", "http://www.webservicex.net/stockquote.asmx?op=GetQuote",true);
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4) {
alert(xmlhttp.responseText);
// http://www.terracoder.com convert XML to JSON
var json = XMLObjectifier.xmlToJSON(xmlhttp.responseXML);
var result = json.Body[0].GetQuoteResponse[0].GetQuoteResult[0].Text;
// Result text is escaped XML string, convert string to XML object then convert to JSON object
json = XMLObjectifier.xmlToJSON(XMLObjectifier.textToXML(result));
alert(symbol + ' Stock Quote: $' + json.Stock[0].Last[0].Text);
}
}
xmlhttp.setRequestHeader("SOAPAction", "http://www.webserviceX.NET/GetQuote");
xmlhttp.setRequestHeader("Content-Type", "text/xml");
var xml = '<?xml version="1.0" encoding="utf-8"?>' +
'<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">' +
'<soap:Body> ' +
'<GetQuote xmlns="http://www.webserviceX.NET/"> ' +
'<symbol>' + symbol + '</symbol> ' +
'</GetQuote> ' +
'</soap:Body> ' +
'</soap:Envelope>';
xmlhttp.send(xml);
// ...Include Google and Terracoder JS code here...
其他两种选择:
JavaScript SOAP客户端: http://www.guru4.net/articoli/javascript-soap-client/en/ 从WSDL生成JavaScript: https://cwiki.apache.org/confluence/display/CXF20DOC/WSDL+to+Javascript
这里有一些很棒的例子(以及一个现成的JavaScript SOAP客户端!) http://plugins.jquery.com/soap/
检查自述文件,并注意同源浏览器限制。
基于XMLHttpRequest的Angularjs $http wrap。只要在头内容设置下面的代码就可以了。
"Content-Type": "text/xml; charset=utf-8"
例如:
function callSoap(){
var url = "http://www.webservicex.com/stockquote.asmx";
var soapXml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://www.webserviceX.NET/\"> "+
"<soapenv:Header/> "+
"<soapenv:Body> "+
"<web:GetQuote> "+
"<web:symbol></web:symbol> "+
"</web:GetQuote> "+
"</soapenv:Body> "+
"</soapenv:Envelope> ";
return $http({
url: url,
method: "POST",
data: soapXml,
headers: {
"Content-Type": "text/xml; charset=utf-8"
}
})
.then(callSoapComplete)
.catch(function(message){
return message;
});
function callSoapComplete(data, status, headers, config) {
// Convert to JSON Ojbect from xml
// var x2js = new X2JS();
// var str2json = x2js.xml_str2json(data.data);
// return str2json;
return data.data;
}
}
托马斯:
JSON是前端使用的首选,因为我们可以方便地查找。因此,您不需要处理XML。因此,不使用库的SOAP非常麻烦。有人提到SOAPClient,这是一个很好的库,我们的项目就是从它开始的。然而,它有一些局限性,我们不得不重写大量的内容。它以SOAPjs的形式发布,支持向服务器传递复杂的对象,并包括一些示例代理代码以使用来自其他域的服务。