我試圖從安全頁面發送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