【问题标题】:Ajax Request in chrome(Only in Chrome)chrome 中的 Ajax 请求(仅在 Chrome 中)
【发布时间】: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 OriginAccess 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


【解决方案1】:

试试这个:)

$.ajax({
  xhrFields: {
    withCredentials: true
  },
  headers: {
    Authorization: "Basic " + btoa("username:password")
  },
  url: "url",
  type: 'GET',
  success: function(data, textStatus, jQxhr) {
    alert(data);

  },
  error: function(xhr, textStatus, errorThrown) {
    alert(errorThrown + xhr.status + textStatus);
  }
});

【讨论】:

    【解决方案2】:

    你可以在htaccess中添加一些代码

    <IfModule mod_headers.c>
        Header set Access-Control-Allow-Origin "*"
    

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 2019-07-27
      • 2016-10-15
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-04
      相关资源
      最近更新 更多