【问题标题】:How to get var value from a text file?如何从文本文件中获取 var 值?
【发布时间】:2018-01-09 20:13:39
【问题描述】:

例如,有一个http://test.com/a.txt 文件。

['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];              
});

但它没有工作......

【问题讨论】:

  • 它不起作用,因为您可能一开始就无法获取文本文件。从浏览器调用外部站点非常困难,并且经常被跨域策略禁止。
  • 如果请求是可能的,可能是 JSON.parse
  • 如果请求被允许并且您使用了 JSONP,则可以。在这里阅读更多:en.wikipedia.org/wiki/JSONP
  • 价值会给你一些东西,还是请求失败?
  • @AhmadAlsanie:文件的内容不是有效的 JSONP。或 JSON。

标签: javascript file text input var


【解决方案1】:

你不能,因为cross origin requests policy。

但是,如果您提供的另一个 url 是来自服务器的链接,允许跨源请求,那么 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 */             
});

【讨论】:

  • 你可以,如果服务器允许这样的跨域调用......但不太可能。
  • 是不是也不能像下面这样调用整个变量? test.com/a.txt var list = [ ['a.com', false], ['b.com', false], ['c.com', false], ['http://d', false] ];然后,
  • 调用整个变量是什么意思?
  • @Jenny 很抱歉,我仍然没有在评论中收到您的问题。我已经更新了我的答案,够了吗?
【解决方案2】:

如果您在与该文件具有相同来源的页面上执行此操作(请参阅Same Origin Policy),或者该文件的服务器支持来自您的站点的cross-origin requests,您可以通过包装它轻松地将其解析为 JSON在[ 和] 中,将' 转换为":

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

这自然假定数据中没有' 内部 ' 引用的字符串。

如果是服务器不允许允许的跨域请求,则不能从浏览器中进行;您需要向您自己的服务器发出请求,并让您的服务器从另一端请求它。


你的评论:

我刚试过,但没用。它显示一条错误消息。 Uncaught SyntaxError: Unexpected token ;在 JSON.parse() 的位置 10233 处的 JSON 中

那么数据与您在问题中显示的不一样,因为如果是,它会起作用:

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;
}

【讨论】:

  • 我刚试过,但没用。它显示一条错误消息。 Uncaught SyntaxError: Unexpected token ;在 JSON.parse () 的位置 10233 处的 JSON
  • @Jenny:那么数据和你的问题不一样;请参阅更新答案中的证据。
猜你喜欢
  • 1970-01-01
  • 2022-12-26
  • 1970-01-01
  • 2015-01-14
  • 2023-04-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多