Javascript jQuery ajax post未捕获范围错误:超过最大调用堆栈大小
我对jQueryAjax有一个问题。 我有javascriptJavascript jQuery ajax post未捕获范围错误:超过最大调用堆栈大小,javascript,jquery,Javascript,Jquery,我对jQueryAjax有一个问题。 我有javascript <script type="text/javascript"> $(function() { $('body').on("click", "#pager a", function(e) { e.stopPropagation(); e.preventDefault(); var a = $(this);
<script type="text/javascript">
$(function() {
$('body').on("click", "#pager a", function(e) {
e.stopPropagation();
e.preventDefault();
var a = $(this);
var model = $('#searchForm').serialize();
$.ajax({
url: '/Product/Products',
type: 'POST',
data: {
model: model, page: a
},
success: function (data) {
alert('success');
$('#productsList').html(data);
}
});
});
});
</script>
$(函数(){
$('body')。在('click'),“#pager a”,函数(e){
e、 停止传播();
e、 预防默认值();
var a=$(本);
var model=$('#searchForm').serialize();
$.ajax({
url:“/Product/Products”,
键入:“POST”,
数据:{
型号:型号,页码:a
},
成功:功能(数据){
警惕(“成功”);
$('#productsList').html(数据);
}
});
});
});
这段代码产生错误“UncaughtRangeError:超出了最大调用堆栈大小”,我不明白为什么。我没有触发器,我使用了preventDefault和stopPropagation,但我仍然有这个错误。有人能帮我吗?你需要去掉
var a=$(这个)代码>。我不知道您试图在那里实现什么,但是使用jQuery包装的clicked元素作为请求数据是没有意义的。不是使用var a=$(这)来获取页面,而是使用一个隐藏字段并为字段提供页面值
<input type="hidden" value="xyzpage" id="pageValue">
var pageVal = $("#pageValue").val();
data: {
model: model, page:pageVal
},
var pageVal=$(“#pageValue”).val();
数据:{
型号:型号,页码:pageVal
},
这将解决问题,我想如果您在数据中传递某个未在该范围内定义的内容,也可能会出现此错误。
另一个原因是直接用val()传入数据。无休止的循环也会导致这种错误。查看函数中没有调用相同的函数。我在使用jquery.tmpl.js解析一大块JSON时遇到了这样的问题。使用concat()函数处理大型数组时会出现此错误。以下是问题的链接:
这一问题自2011年以来一直没有得到解决。为了解决这个问题,我必须编辑jquery-3.3.1.js javascript库文件。对于那些想重复此决定的人,请执行以下操作:在库文件return concat.apply([],ret)中找到以下行代码>并用下面的代码替换它
// Flatten any nested arrays
if ([].flat) return ret.flat();
var ret2 = [];
ret.forEach(function (i) {
if (i instanceof Array) {
i.forEach(function (i2) {
ret2.push(i2);
});
} else {
ret2.push(i);
}
});
return ret2;
// original code:
// return concat.apply([], ret);
// chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=103583
我们检查浏览器的武库中是否有一个flat()函数,例如,它有一个chrome浏览器,如果有,只需合并数据数组,就不需要更多了。如果没有,浏览器将走慢一点,但至少不会出现错误。我想分享我的经验
在我的例子中,这只是一个错误的参数名称和完全相同的错误消息:
而不是confID,我输入了configID并得到了这个错误
function openNameEditor() {
var confID = $("#configStatusList").attr("data-id");
debugger;
$.ajax({
url: '@Url.Action("GetModelNameToChange", "Admin")',
type: "GET",
dataType: "HTML",
data: { configID: configID},//Here, instead of confID, I put configID which doesn't exist in the function.
success: function (response) {
$("#name-editor").html(response);
},
error: function (er) {
alert(er.error);
}
});
}
真奇怪。我看不出这段代码为什么会产生这样的结果。你在其他地方没有其他代码吗?你能编辑你的问题并添加你的HTML吗?帮助我们重现错误。您将页面:a
作为您提交的数据的一部分,其中a
是jQuery对象-您希望它做什么?页面上有多少
(即嵌套在#pager
中)?发布你的html<代码>#寻呼机
听起来像是某种分页。例如,如果分页显示中有数千个页面(例如?page=1、?page=2、50、100、1000),所有页面都用…
引用,那么绑定~x
元素上的单击处理程序可以轻松填充堆栈。“使用事件上下文(由此表示)作为jQuery选择器”-但这不是事件,这是对事件发生的元素的引用。是的,你是对的,我的错。但是仍然尝试发送jQuery包装的元素作为请求数据是很奇怪的。这很奇怪,是的,但这可能与最大调用堆栈
错误无关。我在一个测试中测试了,显然你是对的。出于某种原因,在ajax调用中发送jQuery对象会使其陷入混乱。不管怎么说,当你说将整个jQuery对象发送到任何地方都没有任何意义时,你也是对的,因为它根本没有意义:)谢谢!我直接用.val()传递数据,但在一个属性中我忘记了add.val(),您的注释为我节省了很多时间!非常感谢,这确实是因为.val()
在匆忙开发代码时忽略了.val()
。。这个答案救了我。。非常感谢。