【发布时间】:2018-01-09 00:51:20
【问题描述】:
我几天来一直试图让 javascript 使用 SOAP 服务,但无法让它工作。它适用于 Excel、SOAP-UI、Fiddler、Flex,但不适用于 HTML/Javascript。 任何帮助将不胜感激。
到目前为止,我已经在Simplest SOAP example 看到了一个简单的示例。我按照那里的代码替换了我的 Web 服务的适当部分。我得到的所有错误似乎都指向常见的 CORS 错误。
对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 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 的按钮。当我点击它时,我得到两个错误:
选项 xxxxxxxxxxxxxx 403(禁止)
(xxxxxxxxxxxxx 是我的网址)和
https://xxxxxxxxxxxxxxxxxxxxx:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'null' 不允许访问。响应的 HTTP 状态代码为 403。
任何想法为什么这不起作用?另一个大问题是为什么它在 Fiddler 中有效,而不是在我的网页上?我使用了 Fiddlers 作曲家选项卡并输入了与上面详述的几乎相同的信息,它工作正常。
谢谢。
【问题讨论】:
-
在您的服务器上使用代理。 Fiddler 不像浏览器那样受 CORS 限制。该 API 未启用 CORS。使用代理可以轻松解决的常见问题
-
好的,很好的信息。我会环顾四周,看看我能找到什么,如果我有更多问题,我会回来。
标签: javascript web-services soap cors fiddler