有很多问题看起来像我的问题,例如:This one和This one,但他们并非如此。
有人可以给我一个HTML示例的例子,它发送一个数字并显示响应。我需要它在我的HTML应用程序中实现。
例如:
发送: 8
返回: 16
提前致谢。
应发送请求的HTML应用程序
<html>
<head>
<title>SOAP JavaScript Client Test</title>
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://192.168.0.251:9080/wsa/wsa1/wsdl?targetURI=urn:services-progress-com:sys:server', true);
// build SOAP request
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:sys:server:Estagio"> ' +
'<soapenv:Header/> ' +
'<soapenv:Body> ' +
'<urn:lnestagio> ' +
'<urn:vvalor>5</urn:vvalor> ' +
'</urn:lnestagio> ' +
'</soapenv:Body> ' +
'</soapenv:Envelope> ';
xmlhttp.onreadystatechange == function () {
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert('done use firebug to see response');
}
}
};
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
// send request
// ...
window.xmlhttp = xmlhttp;
}
</script>
</head>
<body>
<form name="Demo" action="" method="post">
<div>
<input type="button" value="Soap" onclick="soap();" />
</div>
</form>
</body>
<html>
&#13;
WSDL请求/响应
OBS:我收到了SoapUI 5.0.0的请求/回复
<!--SOAP Request-->
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:sys:server:Estagio">
<soapenv:Header/>
<soapenv:Body>
<urn:lnestagio>
<urn:vvalor>8</urn:vvalor>
</urn:lnestagio>
</soapenv:Body>
</soapenv:Envelope>
<!--SOAP Request-->
<!--SOAP Response-->
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<lnestagioResponse xmlns="urn:services-progress-com:sys:server:*emphasized text*Estagio">
<result xsi:nil="true"/>
<vcalc>16</vcalc>
</lnestagioResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
<!--SOAP Response-->
&#13;
这是另一个例子:(但它有效......)
<!--I would like to do something like this, Must I create this ".asmx"? how to do it and where must I put this-->
<form action='http://www.w3schools.com/webservices/tempconvert.asmx/FahrenheitToCelsius'
method="post" target="_blank">
<table>
<tr>
<td>Fahrenheit to Celsius:</td>
<td>
<input class="frmInput" type="text" size="4" name="Fahrenheit">
</td>
</tr>
<tr>
<td></td>
<td align="right">
<input type="submit" value="Submit" class="button">
</td>
</tr>
</table>
</form>
<form action='http://www.w3schools.com/webservices/tempconvert.asmx/CelsiusToFahrenheit'
method="post" target="_blank">
<table>
<tr>
<td>Celsius to Fahrenheit:</td>
<td>
<input class="frmInput" type="text" size="4" name="Celsius">
</td>
</tr>
<tr>
<td></td>
<td align="right">
<input type="submit" value="Submit" class="button">
</td>
</tr>
</table>
</form>
&#13;
答案 0 :(得分:1)
由于我无法发表评论,因此您提供的代码中需要纠正一些问题:
在构建SOAP请求(&#34; sr&#34;变量)的最后,你将它连接起来。离开+。
您还可以检查xml.onreadystatechange与您提供的函数(使用==)之间的相等性,而不是将函数分配给该属性。只需将其更改为单个等号。
我没有立即看到会导致此失败的任何其他内容,但如果您想要从控制台检查XMLHttpRequest对象,请将其设置为全局变量而不是本地变量(函数 - 一个。我猜你的计划是通过Firebug中的网络检查员来查看响应,但是自从我使用它以来已经很长时间了,所以我不记得是否可能或不是,但我想我会包含代码,以便在最后在控制台中手动查看对象。
删除/更改在开头标有减号的行,添加标有加号的行。
<html>
<head>
<title>SOAP JavaScript Client Test</title>
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'http://192.168.0.251:9080/wsa/wsa1/wsdl?targetURI=urn:services-progress-com:Agrosys:Agroserver', true);
// build SOAP request
var sr =
'<?xml version="1.0" encoding="utf-8"?>' +
'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:services-progress-com:Agrosys:Agroserver:AgroEstagio"> ' +
'<soapenv:Header/> ' +
'<soapenv:Body> ' +
'<urn:lnestagio> ' +
'<urn:vvalor>5</urn:vvalor> ' +
'</urn:lnestagio> ' +
'</soapenv:Body> ' +
- '</soapenv:Envelope> ' +
+ '</soapenv:Envelope> ';
- xmlhttp.onreadystatechange == function () {
+ xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert('done use firebug to see response');
}
}
};
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.send(sr);
// send request
// ...
+ window.xmlhttp = xmlhttp;
}
</script>
</head>
<body>
<form name="Demo" action="" method="post">
<div>
<input type="button" value="Soap" onclick="soap();" />
</div>
</form>
</body>
<html>
答案 1 :(得分:0)
我没有看到这个问题与previous one you already posted之间的区别。
再一次,建议使用服务器端语言(如PHP)来处理SOAP服务,因为它们通常具有处理SOAP的内置库。
但是如果只有JS的解决方案是强制性的,那么你将不得不分析SOAP服务器提供的XML响应和一些内置的JS函数(这将有点棘手)或使用第三方JS库。
例如,jQuery有一个parseXML()函数,允许您处理XML文档。
或者,正如有人在您之前的问题中告诉您的那样,Javascript SOAP Client为您提供了一种通过JS进行SOAP调用的更简单方法。
如果您需要进一步的帮助,请提供SOAP服务器发送的响应内容。