【发布时间】:2018-09-07 03:19:23
【问题描述】:
Jquery ajax 请求在 IE 中运行良好,但在 chrome 中出现以下错误
XHR failed loading: OPTIONS http://someurl/
send @ jquery.min.js:2
ajax @ jquery.min.js:2
(anonymous) @ index.html:6
添加以下参数头后的事件
$.ajax({
beforeSend: function (xhr) {
xhr.setRequestHeader ("Authorization", "Basic " + btoa("user" + ":" + "passoword"));
},
url: 'url',
type: 'get',
contentType:'text/html',
headers: {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS, HEAD, GET, POST, PUT, DELETE'
},
success: function( data, textStatus, jQxhr ){
alert(data);
$('#idc').html( data );
},
error: function( xhr, textStatus, errorThrown ){
alert(errorThrown+xhr.status+textStatus);
}
});
应用程序使用基本身份验证,它在 ie 中运行良好,但在 chrome 中,它没有选择凭据并重定向到需要输入凭据的其他 url。 我浏览了stackoverflow中的所有网址,但没有任何效果
【问题讨论】:
-
您能提供一些示例代码(javascript)吗?另外:像
Acces Control Allow Origin和Access Control Allow Methods这样的 CORS 标头应该在服务器端实现,而不是包含在 AJAX 的请求标头中。 -
你在服务器端的后端添加
'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, PUT',了吗? -
添加用于那个
ajax request的代码,没有它,只有响应,很难猜测发生了什么。 -
headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS, HEAD, GET, POST, PUT, DELETE' },将此放在您的请求中是没有意义的。只有服务器可以设置这些选项。它们属于 response,而不是 request。检查这些标头的 MDN 文档,它提到它们是仅限服务器的标头。只有服务器才能决定它接受什么方法,以及它允许 CORS 用于什么来源。作为调用者,您无法决定 - 否则 CORS 的目的是什么? -
首先删除
headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'OPTIONS, HEAD, GET, POST, PUT, DELETE' },,这将创建不使用 AUTH 的预检
标签: javascript jquery google-chrome