例如,有一个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];
});
但它没有用......
答案 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;
}