【问题标题】:jQuery - remote validation rulejQuery - 远程验证规则
【发布时间】:2013-02-27 15:59:31
【问题描述】:
<script type="text/javascript">
$(document).ready(function() {
    jQuery(function($){
        $("#form").submit(function(e){
           if ($(this).valid()){
                $.ajax( {
                    type: "POST",
                    url: "http://localhost/My/modules/validate.php",
                });
           }
           return false;
     })});
        $("#form").validate({
            rules: {
                user: {
                    remote: {
                        url: "http://localhost/My/modules/validate.php",
                        async: false,
                    }
                }
            }
        });
});
$.validator.setDefaults({
    debug:      true,
    success:    "valid",
});
</script>

我想创建远程验证规则。此示例正确读取 ajax 请求。虽然返回 true/false 都评估为验证错误。

但是,删除 ajax 部分(jQuery())会导致缺少 ajax 初始化,甚至没有处理请求。

async: false 似乎是被动的,删除它会导致同样的事情。

任何人都可能知道这里可能出了什么问题?

编辑:

$(document).ready(function() {
        $("#form").validate({
            rules: {
                user: {
                    remote: "http://localhost/My/modules/validate.php",
                }
            },
            submitHandler: function (form) {
                // do your ajax form submission here
                return false; // prevent redirect since you did ajax
            }
        });
});
</script>

【问题讨论】:

  • 不过,它的行为非常奇怪 - $("#form").valid() 始终为 TRUE,并且在单击提交时工作流会停止,就好像它是 false 一样。
  • 这是整个脚本...没人知道吗?废话,我试图把它吹出半天......
  • 为什么要从两个地方调用同一个 PHP?是validate.php 用于使用remote 规则验证一个字段,还是validate.php 用于提交表单?

标签: php jquery jquery-validate


【解决方案1】:

使用 Validate 插件时,您不需要外部 submit 处理程序,因为它已经内置了所有事件处理程序。

内置的submitHandler 仅在表单有效并且您可以在其中放置任何ajax 以提交表单时才会触发。

您在两个地方执行ajax...使用remote 规则和您的submit 处理程序。

  • 如果您的 ajax 用于验证字段,请使用 remote 规则。
  • 如果您的 ajax 用于表单提交,请使用 submitHandler

这仅使用the remote rule, as per documentation:

$(document).ready(function () {

    $("#form").validate({
        rules: {
            user: {
                // ajax in remote rule to check this field
                remote:  "http://localhost/My/modules/validate.php"
                }
            }
        }
    });

});

// get rid of all this
//$.validator.setDefaults({
    //debug: true,  // not needed in production
    //success: "valid", // this is already the default.
//});

以下只是我的建议如果您使用 ajax 进行表单提交。否则忽略它。

这是使用the submitHandler callback, as per documentation:

$(document).ready(function () {

    $("#form").validate({
        // your rules & options,
        submitHandler: function (form) {
            // do your ajax form submission here
            return false; // prevent redirect since you did ajax
        }
    });

});

【讨论】:

  • “//你的ajax表单提交在这里”是什么?我应该在里面放点东西吗?
  • @user2115883,我不知道你在做什么。 // put your ajax here 是您放置 ajax 代码以提交表单的地方。您是否使用ajax 提交表单?我不知道......但它应该放在那个地方。
  • @user2115883,只要注意第一部分(关于remote 规则),如果这就是你所做的一切。
  • 是否有必要在这个.php文件的某些条件语句中同时使用echo 'true'和echo 'false'?
  • @user2115883, As per remote documentation linked above: "服务器端资源通过$.ajax (XMLHttpRequest) 调用并获取一个键/值对,对应于已验证元素的名称及其作为 GET 的值参数。响应被评估为 JSON,对于有效元素必须是 true,对于无效元素,可以是任何 falseundefinednull,... "
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多