我对jquery ajax有问题。我有javascript
<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>
此代码产生错误"未接管的连击:最大呼叫堆栈大小超过了",我不明白为什么。我没有触发器,我使用了预防违规和止损,但是我仍然有这个错误。谁能帮我?
如果您将数据传递到该范围中未定义的数据中,也可能会出现此错误。另一个原因是直接使用val()传递数据。
而不是使用var a = $(this)获取页面,使用一个隐藏字段并将页面值给字段。
<input type="hidden" value="xyzpage" id="pageValue">
var pageVal = $("#pageValue").val();
data: {
model: model, page:pageVal
},
这将解决我猜
我想分享我的经验,
就我而言,这只是一个错误的参数名称,而完全相同的错误消息:我放置了配置,而不是结识,并得到了此错误。
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);
}
});
}
您需要取下var a = $(this);
。我不知道您尝试在那里实现什么,但是使用jQuery包装的单击元素作为请求数据是无sense的。
无尽的循环也可能导致这种错误。查看您在功能中不调用相同功能。
我在使用jquery.tmpl.js解析一大块JSON时遇到了这样的问题。使用Concat()函数处理大型数组时会出现此错误。这是一个问题的链接:https://bugs.chromium.org/p/chromium/issues/detail?id=103583自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浏览器,并且是否存在 - 简单地合并数据阵列 - 不需要更多。如果没有,浏览器将走较慢的路径,但至少没有错误。