我正在製作一個基於jQuery.ajax()
的AJAX腳本,並且已經到了一個地步,我應該以某種方式檢查我嘗試加載的鏈接是否爲html頁面或像swf,圖像或zip等不同的東西。所以我需要以某種方式檢查內容類型標題並決定是否應該獲取內容(如果它是html)或拋出ajax調用並執行window.location = theUrl
。我不想要的是獲得整個文件只是爲了找出它是一個100MB的zip文件。jQuery AJAX只提取標題並決定是否獲取內容
有沒有辦法'暫停'(或中止)的請求,而它仍然會去,只讀頭? HEAD
調用不是一個選項,因爲這樣我就不得不每次向服務器發送2個請求。
也許某種黑客與setTimeout
和低級別的xhr功能?
在此先感謝! :)
編輯:試圖從請求完成之前setTimeout中從xhr獲取標題,但它似乎並沒有填充它,直到所有的數據已被提取。
編輯2:我砍死我周圍的jQuery的東西的方式,結合自身的onreadystatechange:
var xhrr = new window.XMLHttpRequest();
$.ajaxSetup({
xhr: function() { return xhrr }
});
...
$.ajax(....);
var theirfunc = xhrr.onreadystatechange;
xhrr.onreadystatechange = function() {
console.log('xhr state: ', xhrr.readyState);
theirfunc();
};
因此,這給了我州1,2,3,4,爲了和我能得到的內容類型併成功中止。我仍然在調查爲什麼當jquery自己創建XMLHttpRequest對象時它不起作用。如果我跳過ajaxSetup部分並得到var xhrr = $.ajax(...)
然後以相同的方式綁定它將無法工作。那麼我的xhr與jquery的有什麼不同呢?我看到他們這樣做:
function createStandardXHR() {
try {
return new window.XMLHttpRequest();
} catch(e) {}
}
所以它不應該有所作爲?
編輯3:找到它! jquery 1.6只返回一個虛假的xhr對象,只有少數屬性,onreadystatechange
不是其中之一。
爲什麼HEAD不是一種選擇?這正是它的目的,並且HEAD請求的成本應該幾乎沒有。 HTTP是一個偉大的協議,如果人們開始使用它的所有功能,網絡將是一個更好的地方。 – Daff
我不想再提出任何要求。也許如果我找不到另一種方式來做到這一點... – stormbreaker