【问题标题】:Submitting form with AJAX not working. It ignores ajax使用 AJAX 提交表单不起作用。它忽略了ajax
【发布时间】:2016-10-12 23:52:34
【问题描述】:

我以前从未使用过 Ajax,但从研究和其他帖子来看,它看起来应该能够运行表单提交代码而无需重新加载页面,但它似乎不起作用。

它只是重定向到 ajax_submit.php,就好像 js 文件不存在一样。我试图使用 Ajax 在不重新加载任何内容的情况下访问 ajax_submit。

我正在尝试做的事情可能吗?

HTML 表单:

<form class="ajax_form" action="ajax_submit.php" method="post">
<input class="input" id="license" type="text" name="license" placeholder="License" value="<?php echo htmlentities($person['license1']); ?>" />
<input class="input" id="license_number" type="text" name="license_number" placeholder="License number" value="<?php echo htmlentities($person['license_number1']); ?>" />

<input type="submit" class="form_button" name="submit_license1" value="Save"/>
<input type="submit" class="form_button" name="clear1" value="Clear"/>
</form>

在 scripts.js 文件中:

$(document).ready(function(){
$('.ajax_form').submit(function (event) {
    alert('ok');
    event.preventDefault();
    var form = $(this);
    $.ajax({
        type: "POST",
        url: "ajax_submit.php",//form.attr('action'),
        data: form.serialize(),
        success: function (data) {alert('ok');}
    });
});
});

在 ajax_submit.php 中:

require_once("functions.php");
require_once("session.php");
include("open_db.php");

if(isset($_POST["submit_license1"])){
    //query to insert
}elseif(isset($_POST['clear1'])) {
    //query to delete
}

我有“&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"&gt;&lt;/script&gt;” 在html头中

【问题讨论】:

  • 好的开始调试。在准备好的里面添加console.log 行。它会被触发吗?接下来,console.log($('.ajax_form').length); 返回什么?
  • 代码看起来不错,打开你的控制台并检查错误。
  • form.serialize() 不包含任何按钮。它不知道您点击了哪个按钮来提交表单。

标签: javascript jquery ajax forms submit


【解决方案1】:

form.serialize() 不知道提交表单时使用了哪个按钮,因此它不能在结果中包含任何按钮。所以当 PHP 脚本检查 $_POST 中设置了哪个提交按钮时,它们都不匹配。

不要对submit 事件使用处理程序,而是对按钮使用单击处理程序,并将按钮的名称和值添加到data 参数。

$(":submit").click(function(event) {
    alert('ok');
    event.preventDefault();
    var form = $(this.form);
    $.ajax({
        type: "POST",
        url: "ajax_submit.php",//form.attr('action'),
        data: form.serialize() + '&' + this.name + '=' + this.value,
        success: function (data) {alert('ok');}
    });
});

【讨论】:

  • 为什么在按钮上?如果通过键盘提交将绕过点击
  • 当您通过键盘提交时,它会将其视为单击第一个提交按钮。
  • 哇......多年来我从来没有意识到这一点。一定是几年前被误导了,并且一直使用提交事件
  • 好吧,也许我要求它在那里做太多事情。我一直在寻找一种简单的方法,让一个小的 js 文件自动采用以任何方式提交的任何表单,将其发送到一个大的 php 文件,该文件可以使用 if(isset()) 为每个表单和每个按钮运行正确的代码。
【解决方案2】:

您的 ajax 调用运行良好。您的代码几乎没有概念错误 -

  1. form.serialize() 不会附加提交按钮的信息。

  2. 如果您想清除表单,可以使用类似这样的方法来完成

$('#resetForm').click(function(){ $('.ajax_form')[0].reset(); });

  1. 最后完成您的任务并使用echo(如echo 'successful'echo failed 等)将成功或失败值返回给ajax 调用。在您的代码中使用else 条件。你会更清楚。

【讨论】:

    【解决方案3】:

    从表单中删除“动作”和“方法”属性。你不应该需要它们。

    【讨论】:

    • 这样能解决问题吗?
    • 渐进式增强...如果禁用脚本,表单仍将提交...错误答案
    • 是的...我不能说我曾经做过一个网站在禁用 JavaScript 的情况下仍然可以运行,所以我没有想到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2011-02-12
    相关资源
    最近更新 更多