我使用 jQuery 编写了一个 CORS 请求,它很简单:
var BJS = {Services: {} };
BJS.Services.GetDatasources = function (data, success, fail) {
if (data == null) data = {};
var u = data["user"],
p = data["pass"],
url = data["url"],
ext = data["ext"],
secure = data["secure"] ? "https://" : "http://",
up = BJS.Base64.encode(u + ":" + p),
d = data["data"] ? data["data"] : "";
$.ajax({
url: secure + url + ext,
data: d,
headers: {
Authorization: "Basic " + up
},
success: success,
error: fail
});
};
此请求在 Chrome 中完美运行。在 IE 中,它返回一个错误:
Error: Access is denied.
at send (...)
at ajax (...)
at GetDatasources (...)
at eval code (eval code:1:1)
at Global code (Unknown script code:5:1)
这对我来说指向我相信的 $.ajax 请求。
我应该以不同的方式处理这个 ajax 请求吗?需要不同的变量吗?
我希望 jQuery 的 $.ajax 调用能够从浏览器依赖中抽象出来,以允许跨浏览器的更统一的功能,但可惜,这里不是这种情况。
编辑: 为了安全起见,我删除了标签,但实际上所有变量 DID 都有默认值:例如:
u = data["user"] || "admin";
但我想从外界删除哈希、url 等。
编辑 没有人发布任何答案,但我想展示一种我为好奇的人所做的解决方法,但根本问题仍未得到解答。
$.support.cors = true
if ($.browser.msie && parseInt($.browser.version, 10) >= 8 && XDomainRequest) {
//IE
//using a webservice will remove the cors, and you can just forward the response to the client.
//it takes up some processing time, but this is the workaround i accomplish.
$.ajax({url: "webservice.svc"}); //this can be a .php file, or anything really that runs ont he server.
}else{
//chrome/ff
//call page as normal.
$.ajax({url:"resource_file"});
}