【问题标题】:jQuery submit() Not Executing When Form Submitted提交表单时jQuery submit()不执行
【发布时间】:2014-04-05 00:20:29
【问题描述】:

我正在尝试在用户提交表单时运行 PHP 文件。但是,submit() 函数永远不会运行。我已经阅读了很多关于这个问题的建议,但没有一个解决了这个问题。所以我有一个看起来像这样的表格:

<body>
<form id="signupform">
    <div id="required">
        <table>
            Form fields
        </table>
    </div>
    <div id="notrequired">
        <table>
            More form fields
        </table>
    </div>
    <button type="Submit" name="action">Submit</button>
</form>

<script>
    $(document).ready(function() {
        $("#signupform").submit(function(e) {
            alert("Please work!");

            $.ajax({
                type    : 'POST',
                url     : 'process.php',
                data    : JSON.stringify($'signupform').serializeArray(),
                dataType: 'json'
            })

            //More code
        });
    }););
</script>
</body>

除了类型之外,文件中没有任何内容具有“提交”值。我已经尝试过使用和不使用 $(document).ready()。所以我几乎没有想法。任何建议。

哦,它不适用于任何浏览器。

【问题讨论】:

  • 浏览器控制台有错误吗?您想将e.preventDefault() 添加到您的函数中以停止默认表单提交,但如果连警报都没有显示,那么显然还有其他问题。
  • 您在关闭 ajax 请求时遗漏了一个分号。也许修一下?另外,浏览器控制台中的任何错误?编辑:您在关闭 document.ready 函数时也错过了}
  • @BasitSaeed Javascript 允许您在行尾省略分号。
  • 警报是否发生?如果没有,您是否在任何地方都包含 jQuery?
  • @Barmar 可能是语法错误,因为 document.ready 函数没有正确关闭。

标签: jquery html forms validation submit-button


【解决方案1】:

这一行有语法错误:

data    : JSON.stringify($'signupform').serializeArray(),

您错过了对$() 的调用中的括号。

您还错过了按 id 选择的 #,并且您可能想要 .serialize() 而不是 .serializeArray(),但显然这实际上并不是语法错误。

应该是:

data    : JSON.stringify($('#signupform').serialize()),
// add parens here -------^ ^   and here ------------^
// add # here --------------/

还有一个额外的); 在你的函数末尾应该被删除。

你也不需要JSON.stringify()

 data    : $('#signupform').serialize(),

并且在某个地方(也许您已经在“更多代码”部分中有此内容)您想要停止默认的表单提交操作:

e.preventDefault();

【讨论】:

  • 好的,我加了括号,谢谢。使用serialize() 会让PHP 读取通过$_POST[] 传递的数据吗?我想我必须为此使用serializeArray()
  • 无论哪种方式都可以尝试,自己看看。
  • 我尝试使用 serialize() 并且效果很好,但是,当我省略 JSON.stringify() 时,单击提交按钮时没有任何反应。你认为我的 AJAX 请求还有什么问题吗?无论如何,数据似乎没有正确发送,但是当将表单操作更改为“process.php”时,它可以正常工作。
  • 如果你说它与.serialize()JSON.stringify() 完美配合,那么坚持下去。如果您更改并且没有任何反应,则可能是一些语法错误停止了整个运行。您在浏览器的控制台中是否遇到任何错误?
  • 我认为这可能与这个问题无关,但主要发生的事情是即使ajax请求成功并且将表单添加到数据库中,该函数也会运行'.fail ()' 函数。
【解决方案2】:

在你的 script 标签中添加这个编辑过的代码:

$(document).ready(function() 
{
    $("#signupform").submit(function(e) 
    {
        alert("Please work!");

        $.ajax({
            type    : 'POST',
            url     : 'process.php',
            data    : JSON.stringify($('#signupform').serializeArray()),
            dataType: 'json'
        })

        //More code
    });
});

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2011-10-04
    相关资源
    最近更新 更多