如何从文本文件中获取var值?

时间:2017-08-02 14:26:11

标签: javascript file text input var

例如,有一个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];              
});

但它没有用......

2 个答案:

答案 0 :(得分:1)

你不能,因为cross origin requests policy

但是,如果您提供的其他网址是来自服务器的链接,允许跨源请求,那么class ScraperPipeline(object): logger = logging.getLogger(__name__) def process_item(self, item, spider): session = spider.publi_sci_session self.logger.debug('Prepare item.') item.prepare() def parse_affiliation(affiliation_string): email = re.findall(r'[\w\.-]+@[\w\.-]+.\w{2,}', affiliation_string) email = email[0] if len(email) > 0 else None return {'dirty': affiliation_string, 'email': email} self.logger.debug('Check if article already exist.') Article.check_exist(session, item['title'], item['doi']) # Authors authors = [] self.logger.debug('Begin authors processing.') if 'authors' in item and item['authors'] is not None: for author_item in item['authors']: try: author_item.prepare() except RuntimeWarning: continue self.logger.debug('Get or create author.') author = get_or_create(session, Author, None, first_name=author_item['first_name'], last_name=author_item['last_name'])[0] if author in authors: continue if 'affiliation_info' in author_item and author_item['affiliation_info'] is not None: self.logger.debug('Parse author affilication.') affiliation_info = parse_affiliation(author_item['affiliation_info']) self.logger.debug('Get or create affilication.') affiliation = get_or_create(session, Affiliation, defaults={'email': affiliation_info['email']}, dirty=affiliation_info['dirty'])[0] session.add(affiliation) author.add_affiliation(session, affiliation, item['publication_year']) authors.append(author) # Keywords keywords = [] self.logger.debug('Begin keywords processing.') for keyword_item in item['keywords']: self.logger.debug('Get or create keyword.') keyword = get_or_create(session, Keyword, None, keyword=keyword_item)[0] if keyword in keywords: continue keywords.append(keyword) # Journal self.logger.debug('Get or create journal.') journal = get_or_create(session, Journal, None, name=item['journal'])[0] # Article article = Article( title=item['title'], abstract=item['abstract'], publication_year=item['publication_year'], doi=item['doi'], journal=journal, keywords=keywords, authors=authors, scrape_session_id=spider.scrape_session_id ) session.add(article) session.add(ArticleUrl(article=article, url=item['url'])) self.logger.debug('Commit article.') session.commit() return item 将有效。

但由于非常不可能成为服务器,因此您将获得JQuery.get而不是JSON对象。这意味着你必须解析它,如其他答案所示。

如果您不需要将数据与服务器同步,则应使用其他脚本语言(例如bash的Content-Type: text/plain)在您的服务器上下载该文件。然后使用此文件使用javascript进行查询:

curl
# bash
curl 'http://test.com/a.txt' -o a.txt

答案 1 :(得分:0)

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

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

当然,这假设数据中没有' ' - 引用的字符串。

如果它是服务器允许的跨源请求,则无法从浏览器执行此操作;您需要向自己的服务器发出请求,让服务器从另一方请求它。

重新评论:

  

我刚尝试过,但没有用。它显示一条错误消息。未捕获的SyntaxError:意外的令牌;在JSON的位置10233在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;
}