我试图从安全页面发送AJAX请求,但XMLHttpRequest对象没有正确解析URL的协议部分。这种行为在Safari,Chrome和Canary中是相同的。我的AJAX请求对象没有正确解析URL的协议部分
这里是我的JavaScript:
function sendGETRequest(url, params, callback) {
"use strict";
var req = new XMLHttpRequest();
req.onreadystatechange = function() {
if (req.readyState === 4) {
if (req.status !== 200) {
callback({ajaxError: true, status: req.status});
} else {
callback(req);
}
}
};
req.open("GET", url + "?" + params, true);
req.setRequestHeader("X-Requested-With", "XMLHttpRequest");
req.send();
}
这里是传递给sendGETRequest(一些不同的URL),与他们的结果一起:
url = "ajax/";
GET https://mydomain/mypage/ajax/?params 404 (NOT FOUND)
以上是预期的行为:相对URL是正确的完整地解决了协议。
url = "/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
在这里,真实的URL被正确地追加到域根目录,但是使用了错误的协议。
url = "https://mydomain/ajax/";
The page at https://mydomain/mypage/ displayed insecure content from http://mydomain/ajax/?params.
这里,协议被忽略。
要说清楚,我并不是试图围绕相同的原产地政策工作;我想从安全页面向具有相同(安全)来源的资源发送AJAX请求。我怎样才能完成这个简单的任务?
服务器端发生了什么?你使用Apache与.htaccess重写规则?我有一个预感,问题不是ajax,而是服务器。当然,除非你能证明实际的连接是*不是通过端口443,或者你的服务器日志显示请求了http。 – cegfault 2012-08-14 19:14:53
在上面的第二个和第三个示例中,浏览器从不发送请求,因为请求违反了同一个源策略。这个问题根本不涉及服务器。 – Slothrop 2012-08-14 19:29:41