2015-05-12 59 views
0

我有一個簡單的javascript腳本,我想使用存在於遠程URL(例如https://not-my-domain.com/test.csv)中的CSV文件。獲取遠程CSV文件並將其放入變量

我不需要解析CSV,只是爲了得到它作爲一個簡單的字符串。我已經試過:

function getCSV() { 
     var file = "https://not-my-domain.com/test.csv"; 
     var rawFile = new XMLHttpRequest(); 
     var allText; 

     rawFile.open("GET", file, false); 
     rawFile.onreadystatechange = function() { 
      if(rawFile.readyState === 4) 
       if(rawFile.status === 200 || rawFile.status == 0) 
        allText = rawFile.responseText; 
     }; 

     rawFile.send(); 
     alert(allText); //UNDEFINED! 
     return allText; 
    } 

但是不知怎麼的allText仍然undefined函數終止後。如果你能幫助我解決這個小問題,我會很高興。

+0

您正試圖在文件加載完成前提醒內容。 – Andy

+0

好吧,我懷疑是這樣。如何在加載完成之前阻止程序? – matan129

+0

考慮在'onreadystatechange'內部放置'alert'(或者做其他必要的處理),否則它會在Ajax請求完成之前觸發。 –

回答

1

使用lambda進行簡單回調。您需要一個代理來獲取遠程域csv,或者確保啓用了cors。

function getCSV(func) { 
     var file = "https://not-my-domain.com/test.csv"; 
     var rawFile = new XMLHttpRequest(); 
     var allText; 

     rawFile.open("GET", file, false); 
     rawFile.onreadystatechange = function() { 
      if(rawFile.readyState === 4) 
       if(rawFile.status === 200 || rawFile.status == 0) 
        allText = rawFile.responseText; 
        if(func!=undefined && typeof(func) == "function"){ 
         func(allText); 
        } 
     }; 

     rawFile.send(); 


} 


getCSV(function(contents){ 
    alert(contents); 
}) 
+0

好吧,對我來說似乎更合乎邏輯,謝謝。但現在它顯示空的警報窗口,可能是因爲同源策略。我想提一下,這個腳本是客戶端的,那麼如何與這個策略相對應呢? – matan129

+0

本地主機行爲取決於瀏覽器。 – Radio

+0

對。那麼,將文件加載到字符串中的通用方法是什麼? – matan129

相關問題