首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制深度递归的JQuery Ajax“太多递归”

限制深度递归的JQuery Ajax“太多递归”
EN

Stack Overflow用户
提问于 2015-11-28 23:37:53
回答 1查看 434关注 0票数 2

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

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

此外,我还必须执行同步请求,否则,我将得到的JSON将是一团糟。

编辑:

我在需要一个小递归的查询上测试了脚本,比如4-5级别的树。

代码语言:javascript
复制
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;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-29 12:03:14

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33977717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档