2017-08-02 28 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_? –