$.ajax with auth 在 Safari 中默默地失败(jQuery 2.1.3)

$.ajax with auth silently failing in Safari (jQuery 2.1.3)

每当我尝试在 Safari 中发送带有 usernamepassword 选项的 $.ajax 请求(同源)时,它只会无声地失败并且永远不会触发任何完成、成功或错误回调。完全相同的请求在 Chrome.

中工作正常
req = $.ajax
  url: ...
  type: 'POST'
  username: ...
  password: ...
  data: ...
req.done ...
req.fail ...

如果我运行相同的代码,但没有 usernamepassword

req = $.ajax
  url: ...
  type: 'POST'
  data: ...

请求实际上在 Safari 中通过了,但显然我的服务器的身份验证失败了。我什至不确定如何调试它。我尝试在 jQuery 的源代码中围绕 $.ajax 回调删除一些日志行,看起来(尝试的)经过身份验证的请求甚至从未在 Safari 中退出。

1/8 更新:

还在 Safari/Chrome 中使用 jQuery 1.11.0 进行了测试,发现了相同的结果。

1/8 更新:

gulty 的 beforeSend 解决方案是我在 Safari 中获得基本身份验证的唯一方法:

req = $.ajax
  url: ...
  type: 'POST'
  beforeSend: (xhr) -> xhr.setRequestHeader('Authorization', 'Basic username:password')
  data: ...

您的代码适用于大多数浏览器,无论如何 Safari 没有处理请求,原因只有开发人员知道。

有一个解决方法 - 您需要使用 headers:{} 或在 beforeSend 中设置请求 headers,如下所示:

beforeSend: function (req) {
    req.setRequestHeader('Authorization', "username:password");
}

这是对您的代码的补充 - 对于其他浏览器,您仍应保留用户名:/密码:,因为没有这些凭据我没有正确测试代码。