开发者问题收集

使用 JavaScript 向数据库插入数据时,控制台中会出现“超出最大调用堆栈大小”错误

2020-09-19
68

我搜索了很多内容来修复过去几天遇到的 JavaScript 错误。我看到 StackOverFlow 上有很多问题的答案,但不幸的是,没有人能解决我的错误。

我想要的是使用 JavaScript PHP 数据库 发送一条简单记录。

但我在 控制台 中收到“ jquery.js:8638 Uncaught RangeError: 超出最大调用堆栈大小 ”错误。
感谢您的回复。

我的简单 HTML 代码

<form autocomplete="off">
    <div class="form-group col-sm">
        <label for="fname">First Name</label>
        <input type="text" name="fname" id="fname" class="form-control">
    </div>
    <div class="form-group col-sm">
        <label for="lname">Last Name</label>
        <input type="text" name="lname" id="lname" class="form-control">
    </div>
    <div class="form-group col-sm">
        <button class="btn btn-primary" type="submit" id="submitBtn">Submit</button>
    </div>
</form>

javaScript 代码

$(document).ready(function(){
$("#submitBtn").on("click",function(e){
e.preventDefault();
var fname = $("#fname").val();
var lanme = $("#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");   
        }

    }
});
})
});
2个回答

您可以在 form 上使用 submit 函数,而不必在 type="submit" 按钮上使用 click 函数。

此外,您在发送 ajax 请求时输入了错误的变量 lname ,但您将其作为 lanme

现场演示: (代码经过测试并有效)

$(document).ready(function() {
  $("#myForm").on("submit", function(e) {
    e.preventDefault();

    //Values
    var fname = $("#fname").val();
    var lname = $("#lname").val();

    //Ajax
    $.ajax({
      url: "insertData.php",
      type: "POST",
      data: {
        fname: fname,
        lname: lname
      },
      success: function(data) {
        if (data == 1) {
          //tableData();
        } else {
          //alert("Can't save record");   
        }
      }
    });
  })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<form id="myForm" autocomplete="off">
  <div class="form-group col-sm">
    <label for="fname">First Name</label>
    <input type="text" name="fname" id="fname" class="form-control">
  </div>
  <div class="form-group col-sm">
    <label for="lname">Last Name</label>
    <input type="text" name="lname" id="lname" class="form-control">
  </div>
  <div class="form-group col-sm">
    <button class="btn btn-primary" type="submit" id="submitBtn">Submit</button>
  </div>
</form>
Always Helping
2020-09-19

从此帖子创建了一个问题: 为什么在单击提交按钮时将表单字段 ID 填充为 JavaScript 变量?

问题还有一些其他内容 - 为什么 jquery 会出现堆栈溢出异常,而不是对拼写错误的变量进行一些指示。

考虑此代码:

<html>
<head>
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script>
$(document).ready(function()
{
    $("#submitBtn").on("click", function(e)
    {
        console.log(911, a);
        e.preventDefault();
    })
});
</script>
</head>
<body>
<form>
    <input type="text" id="a" />
    <button type="submit" id="submitBtn">Submit</button>
</form>
</body>
</html>

如您所见,变量 a 已定义并引用 id 为“a”的 HTML 元素。有人能解释一下为什么吗?

这是原始代码中发生的情况 - 数据 JSON 中的 lname 字段被设置为 HTML 元素的引用,jquery 对此处理不当,这意味着它导致无限递归。

Danny Apostolov
2020-09-19