传递用户名/密码时遇到jquery ajax和safari问题

时间:2011-03-30 15:51:56

标签: jquery safari username

我们正试图通过jquery ajax将证书传递给我们的网站(不使用php [是的我知道这是不安全的])。

似乎Safari在使用ajax方法的username / password属性时遇到问题。 ( jquery ajax )我们正在使用jquery 1.5.1

以下是示例代码:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    username: "user",
    password: "pass",
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});

这在Firefox,Chrome和IE7 / 8中运行良好,但Safari甚至不会将ajax发送到服务器(使用wireshark做了跟踪,没有任何东西在管道上)。奇怪的是,error函数被调用。

如果我注释掉用户名和密码,则会发送ajax。

4 个答案:

答案 0 :(得分:2)

更简单:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    headers: {
        "Authorization": "Basic " + Base64.encode("username:password")
    },
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});

这适合我。

问候

答案 1 :(得分:1)

我可以使用beforeSend并创建请求标头来解决此问题。显然,如果不包括这个,Safari会窒息并且不会发送任何内容。这是代码:

$.ajax({
    url: "/some/url",
    type: 'GET',
    cache: true,
    dataType: 'json',
    processData: false,
    data: 'get=login',
    timeout: 7000,
    username: "user",
    password: "pass",
    beforeSend: function (req) {
        req.setRequestHeader('Authorization', "Basic " + btoa("user:password"));
    }
    success: function (data, textStatus, response) {
        Log("success");
    },
    error: function (data, textStatus, response) {
        Log("fail");
    }
});

答案 2 :(得分:0)

您是否看到过Safari在点击包含用户名和密码的网址时显示的反钓鱼警告?

  

http://username:password@example.com/

Safari ant-phising warning

可能会阻止您的AJAX请求被发送(因为它实际上不会加载网站,因此发送请求,直到您单击“忽略”按钮)。

尝试在主浏览器中加载AJAX请求,单击“忽略警告”,然后再次尝试AJAX请求以查看它是否会触发。

答案 3 :(得分:0)

我刚注意到在用户名或密码中加入“@”会导致您遇到相同的行为。 Safari似乎对你可以使用的角色很挑剔...