Javascript维基百科摘要提取错误
Javascript Wikipedia Summary Extraction error
我正在尝试使用 API.
从维基百科中提取数据
这是初始代码的截图:
$(document).ready(function() {
var searchTerm = document.title;
$.getJSON("https://en.wikipedia.org/w/api.php?action=parse&page=" + searchTerm + '&prop=text&format=json&callback=?', function(json) {
$('#wikiInfo').html(json.parse.text['*']);
$("#wikiInfo").find("a:not(.references a)").attr("href", function() {
return "http://www.wikipedia.org" + $(this).attr("href");
});
$("#wikiInfo").find("a").attr("target", "_blank");
});
});
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> </div>
然而,这给了我整个页面,我正在寻找可以给我 Wiki 页面摘要的东西。
我在网上看了看,建议的解决方案是更改一些初始参数并使 JS 看起来像:
var searchTerm = document.title;
$.getJSON("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&titles=" +searchTerm +'&callback=?', function(json) {
$('#wikiInfo').html(json.parse.text['*']);
$("#wikiInfo").find("a:not(.references a)").attr("href", function(){ return "http://www.wikipedia.org" + $(this).attr("href");});
$("#wikiInfo").find("a").attr("target", "_blank");
});
但是,现在我遇到错误:
Uncaught TypeError: Cannot read property 'text' of undefined
at Object.success (wikis.html:9)
at c (jquery.min.js:3)
at Object.fireWith [as resolveWith] (jquery.min.js:3)
at k (jquery.min.js:5)
at HTMLScriptElement.n.onload.n.onreadystatechange (jquery.min.js:5)
有人可以帮我解决一下到底需要更改什么吗?我是处理 JSON 数据和使用 APIs
的新手
您可以获取摘要的页面摘录。唯一的缺点是提取物是纯文本。
我在最后将您的一些代码变成了 jQuery 插件以便于重复使用。
var apiUrl = 'https://en.wikipedia.org/w/api.php';
(function($) {
$.fn.fixWikiLinks = function() {
this.find('a:not(.references a)').attr('href', function() {
return 'http://www.wikipedia.org' + $(this).attr('href');
});
return this;
};
$.fn.setAnchorTargetsBlank = function() {
this.find('a').attr('target', '_blank');
return this;
};
})(jQuery);
$(document).ready(function() {
var searchTerm = document.title;
var params = {
"format" : "json",
"action" : "query",
"prop" : "extracts",
"exintro" : null,
"explaintext" : null,
"titles" : searchTerm,
"callback" : "?"
};
$.ajax({
url: apiUrl + '?' + $.param(params),
cache: true,
dataType: 'jsonp',
success: function(json) {
var pages = json['query']['pages'];
var pageIds = Object.keys(pages);
if (pageIds.length > 0) {
var initialPageId = pageIds[0];
var page = pages[initialPageId]; // Get first page.
var extract = page['extract'];
$('#wikiInfo').html(extract).fixWikiLinks().setAnchorTargetsBlank();
}
}
});
});
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> </div>
我正在尝试使用 API.
从维基百科中提取数据这是初始代码的截图:
$(document).ready(function() {
var searchTerm = document.title;
$.getJSON("https://en.wikipedia.org/w/api.php?action=parse&page=" + searchTerm + '&prop=text&format=json&callback=?', function(json) {
$('#wikiInfo').html(json.parse.text['*']);
$("#wikiInfo").find("a:not(.references a)").attr("href", function() {
return "http://www.wikipedia.org" + $(this).attr("href");
});
$("#wikiInfo").find("a").attr("target", "_blank");
});
});
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> </div>
然而,这给了我整个页面,我正在寻找可以给我 Wiki 页面摘要的东西。 我在网上看了看,建议的解决方案是更改一些初始参数并使 JS 看起来像:
var searchTerm = document.title;
$.getJSON("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exintro=&titles=" +searchTerm +'&callback=?', function(json) {
$('#wikiInfo').html(json.parse.text['*']);
$("#wikiInfo").find("a:not(.references a)").attr("href", function(){ return "http://www.wikipedia.org" + $(this).attr("href");});
$("#wikiInfo").find("a").attr("target", "_blank");
});
但是,现在我遇到错误:
Uncaught TypeError: Cannot read property 'text' of undefined
at Object.success (wikis.html:9)
at c (jquery.min.js:3)
at Object.fireWith [as resolveWith] (jquery.min.js:3)
at k (jquery.min.js:5)
at HTMLScriptElement.n.onload.n.onreadystatechange (jquery.min.js:5)
有人可以帮我解决一下到底需要更改什么吗?我是处理 JSON 数据和使用 APIs
的新手您可以获取摘要的页面摘录。唯一的缺点是提取物是纯文本。
我在最后将您的一些代码变成了 jQuery 插件以便于重复使用。
var apiUrl = 'https://en.wikipedia.org/w/api.php';
(function($) {
$.fn.fixWikiLinks = function() {
this.find('a:not(.references a)').attr('href', function() {
return 'http://www.wikipedia.org' + $(this).attr('href');
});
return this;
};
$.fn.setAnchorTargetsBlank = function() {
this.find('a').attr('target', '_blank');
return this;
};
})(jQuery);
$(document).ready(function() {
var searchTerm = document.title;
var params = {
"format" : "json",
"action" : "query",
"prop" : "extracts",
"exintro" : null,
"explaintext" : null,
"titles" : searchTerm,
"callback" : "?"
};
$.ajax({
url: apiUrl + '?' + $.param(params),
cache: true,
dataType: 'jsonp',
success: function(json) {
var pages = json['query']['pages'];
var pageIds = Object.keys(pages);
if (pageIds.length > 0) {
var initialPageId = pageIds[0];
var page = pages[initialPageId]; // Get first page.
var extract = page['extract'];
$('#wikiInfo').html(extract).fixWikiLinks().setAnchorTargetsBlank();
}
}
});
});
<title>Fire</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<div id="wikiInfo"> </div>