2013-08-04 33 views
2

好吧,getfile可以用來從SYSTEM獲取文件,但是,如何下載site.com/t.txt?如何從外部網址下載文件到變量?

我不能真的找到它,而我發現沒有用,請在之前詢問時重定向我。

+0

如何使用Ajax GET請求? – MightyPork

+2

你不知道。 JavaScript有一個相同的來源政策! – adeneo

+0

我認爲你需要一個服務器端腳本。 – putvande

回答

1

你要求做的事情非常簡單,在現代瀏覽器中使用XMLHTTPRequest。例如:

function load(url, callback) { 
    var xhr = new XMLHTTPRequest(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) callback(xhr.responseText); 
    }; 
    xhr.open("GET", url, true); 
} 
load("site.com/t.txt", function (contents) { 
    // contents is now set to the contents of "site.com/t.txt" 
}); 

但爲了確保瀏覽器與Internet Explorer的完整兼容性,需要更多的代碼,因爲Internet Explorer使用ActiveXObject而不是XMLHTTPRequest。

function createXHR() { 
    if (typeof XMLHTTPRequest === "undefined") { 
    if (createXHR._version) return new ActiveXobject(createXHR._version); 
    else { 
     var versions = [ 
     "Micrsoft.XMLHTTP", 
     "Msxml2.XMLHTTP", 
     "Msxml2.XMLHTTP", 
     "Msxml2.XMLHTTP.3.0", 
     "Msxml2.XMLHTTP.4.0", 
     "Msxml2.XMLHTTP.5.0", 
     "Msxml2.XMLHTTP.6.0" 
     ]; 
     var i = versions.length; 
     while (--i) try { 
     var v = versions[i], xhr = new ActiveXObject(v); 
     createXHR._version = v; 
     return xhr; 
     } catch {} 
    } 
    } else return new XMLHTTPRequest(); 
} 
function load(url, callback) { 
    var xhr = createXHR(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhr.status === 200) callback(xhr.responseText); 
    }; 
    xhr.open("GET", url, true); 
} 

我真的會推薦使用庫,而不是這個jQuery。欲瞭解更多信息

+0

似乎這個XMLHTTPRequest需要命名爲XMLHttpRequest –

0

只要您不針對同源策略,這很容易。在這種情況下,如果腳本嵌入在foo.com的頁面中並請求文件foo.com/*而不是subdomain.foo.com/*,則域匹配。

您只需要爲XMLHttpRequest發出GET請求,並從響應中讀取文件內容。

如果文件位於foo.com上,但該頁面不在,則需要在foo.com上託管該腳本,然後將其包含在此頁面中並使用<script src="foo.com/filerequestscript.js"></script>。 (當然,如果你不控制foo.com,這可能不會發生。)

+0

使用腳本元素無法獲得'.txt'文件,如果您使用CORS,則可以通過XHR跨域獲取文件。 – Quentin