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

时间:2015-01-07 23:38:27

标签: javascript jquery ajax safari

我随时尝试向$.ajax&发送username请求(同一来源) Safari中的password选项,它只是默默地失败,永远不会触发任何完整的,成功的或错误的回调。完全相同的请求在Chrome中运行良好。

req = $.ajax
  url: ...
  type: 'POST'
  username: ...
  password: ...
  data: ...
req.done ...
req.fail ...

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

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

请求实际上是在Safari中进行的,但显然我的服务器验证失败了。我甚至不确定如何调试这个。我尝试在$.ajax回调周围的jQuery源代码中删除一些日志行,看起来(尝试的)经过身份验证的请求似乎永远不会在Safari中出现。

更新1/8:

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

更新1/8:

gulty的发送解决方案是我在Safari中使用基本身份验证的唯一方法:

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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