调试前端代码一直报这个错误:Uncaught RangeError: Maximum call stack size exceeded
代码如下:
var layerindex = layer.load(1, {
shade: [0.1, '#fff'] //0.1透明度的白色背景
});
var featureIds = {"featureId": 0};
<#if featureId??>
featureIds["featureId"] = featureId;
$.ajax({
url: 'featurecheck',
type: 'post',
data: featureIds,
success: function (result) {
layer.close(layerindex);
var res = JSON.parse(result);
if (res.flag == true && res.msg == "true") {
document.getElementById("saveType").style.display = "none";
layer.msg("已被特征组关联且可读,可以不存储特征", {time: 2000});
} else {
$("#save").prop("checked", true);
// document.getElementById("saveType").style.display = "block";
layer.msg("未被特征组关联,不能取消存储,请选择是", {time: 2000});
}
},
error: function (result) {
layer.close(layerindex);
$("#save").prop("checked", true);
// $("input([name='save'][value='1'])").attr("checked",true);
layer.msg("校验失败,需选择是:" + result.responseText, {time: 4000});
}
})
<#else>
$("#save").prop("checked", true);
document.getElementById("saveType").style.display = "block";
layer.msg("新建特征必须选择存储")
</#if>
调试发现出现异常部分为ajax请求部分,进入请求就出现卡顿,一段时间之后就会报出这个堆栈溢出的异常。
一直找不到问题所在。后来看别的博客,发现原来ajax请求发送的数据为空时,也会报出这个异常。我就觉得应该是我传递数据出现了问题。
var featureId = $("#featureId").val();
var featureIds = {"featureId":featureId};
将传递的数据,按如下进行定义和传递,终于成功解决问题。
我猜想应该是data定义的类型不对,数据不能成功发送给后台,后台没收到数据,前端就一直发送,如此循环导致堆栈溢出。