gpt4 book ai didi

javascript - JQuery Ajax限制深度递归 "too much recursion"

转载 作者:行者123 更新时间:2023-12-01 05:36:04 24 4
gpt4 key购买 nike

我的想法是,我向 API 发送大量同步请求,以创建一个 JSON,稍后我将需要它来进行一些集群化。此 API 为我提供有关网站 (scopus.com) 上的文章、评论等的信息。首先,我根据查询发送一个请求,从中获取一个 JSON,其中包含有关某些文章的信息。这些文章被其他文章引用。我也必须获得有关这些的信息,所以我需要递归。问题是由于“递归太多”而出现错误。当递归结束并且程序必须返回到“根”/第一次调用时,似乎会出现错误。所以程序看起来就像一棵非常深的树。

纯Javascript也有这个限制吗?我能做什么?

我还必须执行SYNCHRONOUS请求,否则我得到的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;
}

最佳答案

问题正如 trincot 提到的,我也认为是 2 篇或更多文章相互引用,形成无限循环。我通过在字符串变量中搜索唯一标识符来修复它。因此,如果我的变量中已经存在并且具有该标识符的文章,我将跳过当前文章的递归。

因此,我再次测试了我的脚本,以进行相对较短的查询(仅返回数百篇文章),因为存在大量输出的查询(数百万篇文章)。当我搜索大型查询时,我可能会遇到字符串大小限制(特定于浏览器)甚至“太多递归”。如果是这样,我会让你知道。

建议:如果您的ajax请求中出现“太多递归”错误,请首先搜索无限循环,因为这是最可能的原因。

关于javascript - JQuery Ajax限制深度递归 "too much recursion",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33977717/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com