我一直在努力让javascript使用SOAP服务好几天而无法让它工作。它可以在Excel,SOAP-UI,Fiddler,Flex中使用,但不能在HTML / Javascript中使用。 任何帮助将不胜感激。
到目前为止,我已经在Simplest SOAP example看了一个简单的例子。我按照代码替换了我的Web服务的相应部分。我得到的错误似乎都指向常见的CORS错误。
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。响应的HTTP状态代码为403。
我已经四处寻找原因,并尝试了各种解决方案,但没有一个有效。
以下是我调用webservice的代码
<script type="text/javascript">
function soap() {
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('POST', 'https://myurl', true);
// build SOAP request
var sr =
'<?xml version="1.0" encoding="UTF-8"?>' +
'<soap:Envelope ' +
'xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" ' +
'xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" ' +
'xsi:schemalocation="http://schemas.xmlsoap.org/soap/envelope/">' +
'<soap:Body>' +
'<mymethod xmlns="http://my.com/server/">' +
'<Key>123456789</Key>' +
'</mymethod>' +
'</soap:Body></soap:Envelope>';
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
alert('done. use firebug/console to see network response');
}
}
}
// Send the POST request
xmlhttp.setRequestHeader('Content-Type', 'text/xml');
xmlhttp.setRequestHeader('Authorization', 'Basic myusername/password here');
xmlhttp.send(sr);
}
</script>
HTML只是一个运行javascript的按钮。当我点击它时,我得到两个错误:
选项xxxxxxxxxxxxxx 403(禁止)
(xxxxxxxxxxxxx是我的网址)和
https://xxxxxxxxxxxxxxxxxxxxx:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此不允许原点'null'访问。响应的HTTP状态代码为403。
为什么这不起作用的任何想法?另一个重要问题是为什么它在Fiddler中有效而不在我的网页上?我使用了Fiddlers composer选项卡,并输入了几乎相同的上述信息,并且工作正常。
感谢。
答案 0 :(得分:0)
如果有人来这里寻找答案,这就是我想出来的。
基于上面使用代理的建议,我环顾四周,发现无法使用代理(该服务来自旧的主机,其他组件拼凑在一起)。但是,在这里建立这个想法就是我所做的。
我使用ColdFusion作为Web服务器。它具有使用.NET dll的能力。因此,我创建了一个DLL来访问SOAP服务并返回结果。我能够在ColdFusion页面中捕获此结果(使用jquery / javascript)并使用它,就像我直接从Javascript调用它一样。
所以,我想这可能是使用上面提到的 charlietfl 这样的代理的意思。