我们正试图通过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。
答案 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在点击包含用户名和密码的网址时显示的反钓鱼警告?
可能会阻止您的AJAX请求被发送(因为它实际上不会加载网站,因此发送请求,直到您单击“忽略”按钮)。
尝试在主浏览器中加载AJAX请求,单击“忽略警告”,然后再次尝试AJAX请求以查看它是否会触发。
答案 3 :(得分:0)
我刚注意到在用户名或密码中加入“@”会导致您遇到相同的行为。 Safari似乎对你可以使用的角色很挑剔...