2017-08-02 74 views
-1

例如,有一個http://test.com/a.txt文件。如何從文本文件獲取var值?

['http://a.com', false], 
['http://b.com', false], 
['http://c.com', false], 
['http://d', false] 

我想使用此文件作爲VAR值象下面這樣:

<script> 
... 
var list = [ ***I want to get that .txt file as values here.*** ]; 
... 
</script> 

結果

<script> 
... 
var list = [ 
['http://a.com', false], 
['http://b.com', false], 
['http://c.com', false], 
['http://d', false] 
]; 
... 
</script> 

我如何能做到嗎? 我想下面的javascript代碼:

jQuery.get('http://test.com/a.txt', function(data) { 
// The type o breaking line caracter will vary depending on OS 
var values = data.split("\n");  
var List = values[values.length-1];    
}); 

但它沒有工作...

+2

它沒有工作,因爲你可能無法首先獲取文本文件。從瀏覽器調用外部網站非常困難,並且通常被跨域策略禁止。 –

+0

如果請求是可能的,可能是JSON.parse –

+0

如果請求被允許並且您使用了JSONP,則可以。在這裏閱讀更多信息:https://en.wikipedia.org/wiki/JSONP –

回答

0

如果您在網頁上使用相同的起源該文件這樣做(見Same Origin Policy),或者如果該文件的服務器支持cross-origin requests從您的網站,你可以輕鬆地通過[]包裝,並轉化解析爲JSON '"

jQuery.get('http://test.com/a.txt', function(data) { 
    var list = JSON.parse("[" + data.replace(/'/g, '"') + "]"); 
    // ... 
}); 

當然這假設內部沒有''-數據中的引用字符串。

如果這是一個跨源請求,服務器不允許允許,您不能從瀏覽器執行此操作;你需要向你自己的服務器發出請求,讓你的服務器從另一端請求它。


回覆您的評論:

I just tried it but it didn't work. It shows an error message. Uncaught SyntaxError: Unexpected token ; in JSON at position 10233 at JSON.parse()

然後數據並不如你在你的問題顯示,因爲如果是這樣,它的工作:

var data = 
 
    "['http://a.com', false],\n" + 
 
    "['http://b.com', false],\n" + 
 
    "['http://c.com', false],\n" + 
 
    "['http://d', false]"; 
 
console.log("data:"); 
 
console.log(data); 
 
console.log("parsed:"); 
 
var list = JSON.parse("[" + data.replace(/'/g, '"') + "]"); 
 
console.log(list);
.as-console-wrapper { 
 
    max-height: 100% !important; 
 
}

+0

我剛試過,但沒有奏效。它顯示一條錯誤消息。 未捕獲的SyntaxError:意外的標記;在JSON位置10233 at JSON.parse() – Jenny

+0

@Jenny:然後數據不是如您的問題所示;請參閱更新答案中的證明。 –

+0

我已經解決了這個問題。謝謝! – Jenny

1

你不能因爲不cross origin requests policy

但是,如果您提供的其他網址是來自服務器的鏈接,它允許交叉來源請求,那麼JQuery.get就可以工作。

但由於這是不太可能是一個服務器,你會得到Content-Type: text/plain而不是JSON對象。這意味着你必須解析它,如其他答案中所示。


破解

如果不需要與服務器同步的數據,是下載使用其他腳本語言,如bash的curl您的服務器上的文件。然後使用這個文件用JavaScript來查詢:

# bash 
curl 'http://test.com/a.txt' -o a.txt 
jQuery.get('/a.txt', function(data) { 
    /* use data here, may need to be parsed as in other answer */    
}); 
+2

你可以,如果服務器允許這樣的跨域調用......但這不太可能。 –

+0

也不可能像下面那樣調用整個變量嗎? http://test.com/a.txt var list = [['http://a.com',false], ['http://b.com',false], ['' http://c.com',false], ['http:// d',false] ]; 然後, Jenny

+1

你是什麼意思_calling整個variable_? –