You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JS+PHP插入数据库时出现Maximum call stack size exceeded错误

解决jQuery中「Maximum call stack size exceeded」错误

嗨,我来帮你排查这个问题!首先先指出你代码里一个明显的小失误,再分析栈溢出的核心原因:

首先看JavaScript部分的拼写错误:你把lname写成了lanme:

var lanme = $("#lname").val(); // 这里的变量名应该是lname,不是lanme

这个错误会导致lname参数无法正确传递给PHP,但它通常不会直接引发栈溢出,真正的问题大概率出在其他地方,下面是最可能的原因和解决办法:

1. tableData()函数引发了循环事件触发

你在AJAX请求成功后调用了tableData(),如果这个函数内部存在以下操作,就会形成无限循环,最终耗尽调用栈:

  • 重复绑定了#submitBtn的点击事件(比如每次调用tableData()都重新执行一次$("#submitBtn").on("click", ...),导致事件叠加,每次点击触发N次回调)
  • 间接触发了表单提交动作(比如刷新页面后自动触发提交,或者函数里的逻辑意外触发了按钮点击)

解决建议:

  • 打开tableData()的代码,检查是否有上述问题,确保它只负责刷新表格数据,不会触发表单提交或重复绑定事件
  • 如果确实需要在tableData()里绑定事件,记得先解绑再绑定,避免叠加:
    $("#submitBtn").off("click").on("click", function(e) {
        // 你的回调逻辑
    });
    

2. 事件绑定重复执行

如果你的页面脚本存在重复执行$(document).ready()代码的情况(比如tableData()里又加载了这段绑定代码),会导致#submitBtn被多次绑定点击事件,每次点击触发大量AJAX请求,极端情况下就会出现栈溢出。

解决建议:

  • 把按钮点击事件的绑定代码放在只会执行一次的位置,或者用上面提到的off()方法先解绑再绑定,确保每次只有一个事件回调生效

修复后的JavaScript代码(先修正拼写错误)

$(document).ready(function(){
 // 先解绑再绑定,避免事件叠加
 $("#submitBtn").off("click").on("click",function(e){
 e.preventDefault();
 var fname = $("#fname").val();
 var lname = $("#lname").val(); // 修正拼写错误
 $.ajax({
 url : "insertData.php",
 type : "POST",
 data : {fname:fname, lname:lname},
 success : function(data){
 if(data == 1){
 tableData(); // 请确保这个函数不会引发循环事件
 }else{
 alert("Can't save record");
 }
 }
 });
 })
});

先修正拼写错误,然后重点排查tableData()函数的逻辑,这是引发栈溢出最常见的原因。

内容的提问来源于stack exchange,提问作者Sami Ullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:47:39