几天来我一直试图让javascript使用SOAP服务,但无法让它工作。它将在Excel,SOAP-UI,Fiddler,Flex中工作,但不能在HTML/Javascript中工作。任何帮助将不胜感激。
到目前为止,我已经在最简单的 SOAP 示例中查看了一个简单的示例。我按照那里的代码替换了我的 Web 服务的适当部分。我得到的错误似乎都指向常见的CORS错误。
对预检请求的响应未通过访问控制检查:请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"空"。响应具有 HTTP 状态代码 403。
我环顾四周,找出为什么会这样,并尝试了各种解决方案,但没有一个奏效。
这是我调用网络服务的代码
<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的按钮。当我单击它时,出现两个错误:
选项 xxxx
(xxxxx
https://xxxxxxxxxxxxxxxxxxxxx:对预检请求的响应未通过访问控制检查:请求的资源上不存在"访问控制允许源"标头。因此,不允许访问源"空"。响应具有 HTTP 状态代码 403。
任何想法为什么这不起作用?另一个大问题是为什么它在 Fiddler 中工作而不是在我的网页上?我使用了Fiddlers作曲家选项卡并输入了上面详细介绍的几乎相同的信息,它工作正常。
谢谢。
如果有人来这里寻找答案,这就是我想出的。
根据上面使用代理的建议,我环顾四周,发现没有办法使用代理(该服务来自一个旧的大型机,其他组件拼凑在一起)。但是,在这里建立这个想法就是我所做的。
我正在使用 ColdFusion 作为 Web 服务器。它能够使用 .NET dll。因此,我创建了一个将访问 SOAP 服务并返回结果的 DLL。我能够在 ColdFusion 页面(使用 jquery/javascript)中捕获此结果,并像直接从 Javascript 调用它一样使用它。
所以,我想这可能是使用上面提到的像charlietfl这样的代理的意思。