我的想法是,我向API发送大量同步请求,以创建一个JSON,这是我以后进行集群化所需要的。这个API向我提供了关于站点(scopus.com)的文章、评论等方面的信息。首先,我根据一个查询发送一个请求,从这个查询中我得到了一个JSON,其中包含了一些文章的信息。这些文章被其他文章引用。我也必须得到这些信息,所以我需要递归。问题是,由于“递归太多”,我得到了一个错误。当递归结束,程序必须返回到“根”/the第一次调用时,就会出现错误。所以这个程序看起来就像一棵很深的树。
纯Javascript也有这个限制吗?我能做什么?
此外,我还必须执行同步请求,否则,我将得到的JSON将是一团糟。
编辑:
我在需要一个小递归的查询上测试了脚本,比如4-5级别的树。
var result = '{"entry":[ ';
function query(){
var results = getNumberResults();
if(results>0)
{
var pages = Math.ceil(results/25);
var i;
for(i=0; i<pages; i++){
$.when($.ajax({
url: url,
type: "GET",
async: false,
headers: {'Accept':'application/json'},
success: function(data){
$.each( data['search-results']['entry'], function( i, item ) {
get info from json and save it in my variable
if(data['search-results']['entry'][i]['citedby-count'] > 0)
getCitedBy(data['search-results']['entry'][i]['eid']);
else{
result += '"children-id":[]},';
}
});
}
}));
}
}
result = result.slice(0,-1);
result += "]}";
}
function getCitedBy(eid){
var results = getCitedByNumberResults(eid);
if(results>0)
{
var pages = Math.ceil(results/25);
var i;
for(i=0; i<pages; i++){
$.when($.ajax({
url: url,
type: "GET",
async: false,
headers: {'Accept':'application/json'},
success: function(data){
$.each( data['search-results']['entry'], function( i, item ) {
get info from json and save it in my variable
if(data['search-results']['entry'][i]['citedby-count'] > 0)
getCitedBy(data['search-results']['entry'][i]['eid']);
else{
result += '"children-id":[]},';
}
});
}
}));
}
}
}
function getNumberResults(){
var innerResult;
$.ajax({
url: url,
type: "GET",
async: false,
headers: {'Accept':'application/json'},
success: function(output){
innerResult = output['search-results']['opensearch:totalResults'];
},
error: function (xhr, ajaxOptions, thrownError) {
innerResult = 0;
}
});
return innerResult;
}
function getCitedByNumberResults(eid){
var innerResult;
$.ajax({
url: url,
type: "GET",
async: false,
headers: {'Accept':'application/json'},
success: function(output){
innerResult = output['search-results']['opensearch:totalResults'];
},
error: function (xhr, ajaxOptions, thrownError) {
innerResult = 0;
}
});
return innerResult;
}发布于 2015-11-29 12:03:14
问题就像trincot提到的那样,我也认为有2篇或更多的文章相互引用,形成了一个无限的循环。我通过搜索字符串变量中的唯一标识符来修正它。因此,如果在我的变量中已经存在并带有该标识符的项目,我将跳过当前文章的递归。
因此,我再次测试了我的脚本中相对较短的查询(返回了几百篇文章),因为有大量输出的查询(数百万篇文章)。当我搜索大型查询时,可能会遇到字符串大小的限制(特定于浏览器),甚至出现“过多的递归”。如果是这样,我会告诉你的。
建议:如果在ajax请求搜索中首先出现了“太多递归”错误,则为无限循环,因为这是最可能的原因。
https://stackoverflow.com/questions/33977717
复制相似问题