【问题标题】:Sending an array via JQuery post leads to RangeError: Maximum call stack size exceeded通过 JQuery post 发送数组会导致 RangeError: Maximum call stack size exceeded
【发布时间】:2015-05-29 21:35:33
【问题描述】:

在我的网站上,我使用来自http://www.jqwidgets.com 的 jqxTree。如果你想查找一些东西,你可以在这里找到 API:http://www.jqwidgets.com/jquery-widgets-documentation/documentation/jqxtree/jquery-tree-api.htm

这棵树提供了一个select-event 处理程序,因为我正在构建从根项到选定元素的路径。然后我想通过 JQuery $.post 将该路径传递给我的后端服务器实现。

$('#jqxTree').on('select',function (event) {
  var item = $('#jqxTree').jqxTree('getSelectedItem');
  var cur = $('#jqxTree').jqxTree('getItem', item.parentElement);

  var result = [item];
  while (cur != null) {
    result.unshift(cur);
    cur = $('#jqxTree').jqxTree('getItem', cur.parentElement);
  }

  // this loop is mainly for testing purposes
  var str = "";
  for (var i = 0; i < result.length; i++) {
    str += result[i].label + " > ";
  }
  alert("The selected path is " + str);

  $.post("TreeSelectHandler", {
    'path': result
  });
});

执行此代码会导致完美的警报输出,因此代码运行良好。但是当我尝试执行发布请求时,JQuery 会记录一个RangeError: Maximum call stack size exceeded

发送 str 而不是 result 作为 post 参数可以正常工作,但我希望能够直接传递数组。我做错了什么或者我偶然发现了一个错误?

我使用的是 JQuery 1.10.2,至少在当前版本的 Chrome 和 Firefox 中会出现错误。

更新

尝试对数组进行字符串化,使用以下代码:

var jsonres = JSON.stringify(result);   
$.post("TreeSelectHandler", {
  'path': jsonres
}, null, 'text');

失败: Uncaught InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable. 在第一行 (stringify)。

【问题讨论】:

  • 您是否尝试过传递 JSON 字符串化数组?

标签: javascript jquery


【解决方案1】:

我知道它已经过时了 - 但如果有人遇到这个问题,当我在使用 $.post 时遇到问题时,我会这样做来解决这个问题 - 基本上使用 $.ajax 并确保你有一个“成功”功能

$.ajax({
    type:       'POST',
    url:        url,
    dataType:   'json',
    data:       data,
    success:    mySuccessFunc,
    error:      myErrorFunc
});

【讨论】:

    【解决方案2】:

    问题可能出现在函数递归调用上。请仔细检查结果数组长度,我认为 for 循环会继续推送字符串。

    请点击链接:jQuery - Uncaught RangeError: Maximum call stack size exceeded

    请关闭活动并继续,请尝试在活动前添加到您的第一行的示例代码

    $('#jqxTree').off('select');
    

    【讨论】:

    • 我正在使用的数组的长度不超过 4,通常它们甚至更短。我在调试器中检查了它们,它们的长度是正确的。
    • 不确定我现在得到你了......我只是在上面我的 sn-p 的第一行之前添加了 off-line 并且其他所有内容都保持不变。错误仍然存​​在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多