我正在尝试从安全页面发送 AJAX 请求,但 XMLHttpRequest 对象无法正确解析 URL 的协议部分。这种行为在 Safari、Chrome 和 Canary 中是相同的。
这是我的 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 请求从安全页面发送到具有相同(安全)来源的资源。我怎样才能完成这个简单的任务?