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

JQuery+PHP表单报错Uncaught RangeError: Maximum call stack size exceeded求助

解决Uncaught RangeError: Maximum call stack size exceeded错误及表单数据提交问题

看起来你遇到的问题主要有两个核心原因,咱们一步步来拆解解决:

1. 变量定义错误导致的数据传递异常

先看你的JavaScript代码,这里有个明显的变量覆盖+未定义问题:

var name = $("#name").val(); 
var email = $("#email").val(); 
var phone = $("#phone").val(); 
var name = $("#website").val(); // 这里把存储姓名的name变量重新赋值成了网站地址!
var goals = $("#goals").val(); 
// ...后续post请求里还用到了website变量,但你根本没定义它

你把原本存储用户姓名的name变量又重新赋值为网站输入框的值,而且没有定义website变量,这会导致传递给PHP的website参数是undefined,同时姓名数据也会丢失。

修复方法:把这行错误的变量定义改成:

var website = $("#website").val();

2. 调用栈溢出的根源:表单默认提交行为未阻止

你提到不管是在JS内部调用函数还是绑定到按钮onclick都触发栈溢出,大概率是因为你的提交按钮是<input type="submit">类型,或者你把函数绑定到了表单的submit事件上——此时点击按钮会同时触发你的自定义函数和表单的默认提交行为,默认提交会刷新页面或者重复触发提交逻辑,进而导致循环调用,最终超出调用栈上限。

修复方案一:修改按钮类型并完善函数

把提交按钮改成普通按钮(避免触发表单默认提交):

<button type="button" onclick="SubmitFormData()">提交表单</button>

同时修复后的完整函数可以加上成功/失败回调,方便调试和给用户反馈:

function SubmitFormData() {
  var name = $("#name").val();
  var email = $("#email").val();
  var phone = $("#phone").val();
  var website = $("#website").val(); // 已修复变量名
  var goals = $("#goals").val();
  var reach = $("#reach").val();
  var leadorsale = $("#leadorsale").val();
  var monthlyppc = $("#monthlyppc").val();

  $.post("mailform.php", { 
    name: name, 
    email: email, 
    phone: phone, 
    website: website, 
    goals: goals, 
    reach: reach, 
    leadorsale: leadorsale, 
    monthlyppc: monthlyppc
  })
  .done(function(res) {
    console.log("邮件发送请求已提交:", res);
    // 这里可以添加用户提示,比如 alert("提交成功!我们会尽快联系你")
  })
  .fail(function(err) {
    console.error("请求失败:", err);
    // 失败提示,比如 alert("提交失败,请稍后重试")
  });
}

修复方案二:绑定表单submit事件并阻止默认行为

如果希望保留submit按钮,推荐用jQuery绑定表单的submit事件,明确阻止默认行为(更规范的写法):

$(document).ready(function() {
  // 替换成你的表单实际ID
  $("#contact-form").submit(function(e) {
    // 阻止表单默认提交(关键!解决栈溢出的核心)
    e.preventDefault();
    
    // 提取表单数据
    var name = $("#name").val();
    var email = $("#email").val();
    var phone = $("#phone").val();
    var website = $("#website").val();
    var goals = $("#goals").val();
    var reach = $("#reach").val();
    var leadorsale = $("#leadorsale").val();
    var monthlyppc = $("#monthlyppc").val();

    $.post("mailform.php", { 
      name: name, 
      email: email, 
      phone: phone, 
      website: website, 
      goals: goals, 
      reach: reach, 
      leadorsale: leadorsale, 
      monthlyppc: monthlyppc
    })
    .done(function(res) {
      console.log("提交成功:", res);
    })
    .fail(function(err) {
      console.error("提交失败:", err);
    });
  });
});

对应的HTML表单可以保留submit按钮:

<form id="contact-form">
  <!-- 你的表单输入元素 -->
  <input type="submit" value="提交">
</form>

最后,建议打开Chrome开发者工具的Console面板,查看是否还有其他报错,这样能更精准地排查问题。

内容的提问来源于stack exchange,提问作者Dan Sal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:15:22