【问题标题】:Jquery, Validate, Submit Form to PHP (Ajax Problem)Jquery,验证,向 PHP 提交表单(Ajax 问题)
【发布时间】:2011-08-14 12:18:34
【问题描述】:

很早就开始玩 Javascript、Jquery 和 Validate。

我正在使用提交按钮的onClick方法进行表单提交。

<input class="submit" type="submit" value="Submit" onClick="submitForm()" />

我正在使用提交,以防没有数据或不是每个字段都经过测试。

逻辑正常,但 AJAX 调用似乎不正常。我已将 PHP 剥离为

<?php

touch('phpTouch.txt');
phpinfo();
sleep(30;)
?>

javascript是

$(document).ready(function () {
    $('#formEnquiry').validate();
});

function submitForm() {
    $('#msgid').append('<h1>Submitting Form (External Routine)</h1>');
    if ($('#formEnquiry').validate().form() ) {
        $("#msgid").append("<h1>(Outside Ready) VALIDATED send to PHP</h1>");
            $.ajax({
            url: "testPHP.php",
            type: "POST",
            data: frmData,
            dataType: "json",
            success: function () {
                alert("SUCCESS:");
            },
            error: function () {
                alert("ERROR: ");
            }
        });
    } else {
        $('#msgid').append('<h1>(Outside Ready) NOT VALIDATED</h1>');
    }
    return false;  // Prevent the default SUBMIT function occurring (is this a fact ??)
};

谁能告诉我我做错了什么。

谢谢

【问题讨论】:

  • 几乎没有想到什么。首先在验证中应该有一个提交处理程序。所以这将是 validate 函数中的一个选项。其次,我不会在 onclick 中放置一个函数。如果您想要一个处理程序并且您正在使用 jquery,您应该使用 jquery 中的事件处理程序,例如$(".submit").click(..);,但在这种情况下,您甚至不需要它,只需验证上的 submitHandler。还有 .submit() 是 jquery。
  • 我的问题是我的知识太少了,我不了解内置的处理程序。我知道如何编程(尽管新语言(例如 javascript)的语法是一个学习曲线),但每次只做一个步骤,我就可以理解发生了什么。有人建议我在 Validate 中使用 sublit,但它似乎正在以一个空的形式执行,所以我一次调整了这一步,我显然做错了,因为 php 文件没有被执行。

标签: forms jquery jquery-validate


【解决方案1】:

做这些事情

将 HTML 标记上的 onClick="submitForm()" 更改为 onclick="submitForm(event)"
现在像这样更改submitForm 函数。

function submitForm(evt) {
    $('#msgid').append('<h1>Submitting Form (External Routine)</h1>');
    if ($('#formEnquiry').valid() ) {
        $("#msgid").append("<h1>(Outside Ready) VALIDATED send to PHP</h1>");
            $.ajax({
            url: "testPHP.php",
            type: "POST",
            data: frmData,
            contentType: "application/json;",
            success: function () {
                alert("SUCCESS:");
            },
            error: function (a, b, c) {
                alert(a.statusText);
            }
        });
    } else {
        $('#msgid').append('<h1>(Outside Ready) NOT VALIDATED</h1>');
    }
    evt.preventDefault();
};

请注意这些事项

  1. 检查.valid() 以确定表单的有效性
  2. 调用.preventDefault() 而不是return false;(它更像jQuery-ish)

【讨论】:

  • 非常感谢。问题仍然存在。我已经检查了 php 文件的权限,它确实使用touch 测试更新了文件的时间。后台发生了一些事情,因为 'submitForm(event) 中的消息没有显示,屏幕刷新并清除了表单字段中的数据。抱歉没用,但我学到了更多。
  • 如果我将表单操作设为 php 文件的名称,则 php 文件会执行,因此 AJAX 不知何故没有执行。我希望我能更多地了解底层的事件链,然后我可以尝试调试它们。
  • 你有什么错误吗?我已经更新了代码。还告诉我变量frmData里面是什么?它是有效的json吗?你能给我看看吗?还提醒并检查您是否进入有效部分。也使输入类型=“按钮”
  • 再次感谢您的帮助。我没有收到任何我知道的错误消息! 'frmData 是我从一个例子中复制的。我在表单中的方法是 POST,我不知道在 data: 中输入什么或是否需要。如果有错误并且未发送电子邮件,我想从 php 中返回一些 JSON。我一直在使用 PHP,它正在接收所有数据并发送电子邮件,但它只能通过表单中的 Action 工作,我仍然想使用 AJAX 并希望了解它是如何工作的。我的 ISP 可以阻止 AJAX 吗?再次感谢 - 非常感谢。
  • @mcl 不,如果您可以发布普通帖子,那么 ajax 只是一个附加步骤,因此它不会刷新页面。您可以编辑您的帖子并添加指向您正在使用的验证插件的链接吗?那里有很多,我只是想确保您使用的是我正在考虑的那个,我可以给您举个例子。当你这样做时也@我说它已被编辑,所以我知道要检查它。
猜你喜欢
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多