JQuery验证插件:延迟使用远程 - php

我正在使用remote method中的jQuery validation plugin进行ajax调用。每次在输入字段中按下一个键时,都会激活远程功能。我想添加一个延迟,以便仅当用户停止按下按键几毫秒后才触发ajax请求。

此问题在2012年at GitHub中提出,但在2015年被开发人员关闭:

对这个问题缺乏活动感到抱歉。而不是离开
它不再打开,我决定关闭旧问题,而无需尝试
解决他们,再给人以错误的印象
最终解决。

在讨论论坛中,用户lohfu提出了以下解决方案:

$.validator.methods._remote = $.validator.methods.remote;

var timer = 0;
$.validator.methods.remote = function () {
    clearTimeout(timer);

    var args = arguments;

    timer = setTimeout(function() {
        $.validator.methods._remote.apply(this, args);
    }.bind(this), 500);

    return "pending";
};

但是,存在两个主要问题:

这没用。如果添加延迟,并且远程函数返回false,则仍将提交表单。
当我在输入字段中输入某些东西导致远程功能出错时,它会正确分配class="error"。如果我现在选择其他输入,尽管错误消息仍然存在并且错误消息仍然显示,但class="error"会切换到class="valid"。当我按提交时,也会发生同样的情况。

这是一个最小的示例:

的HTML

<form action="test.php" method= "POST" id="form">
    Name:  <input type="text" name="name"><br>
    Email:  <input type="email" name="email"><br>
    <input type="submit">
</form>

JS

    $("#form").validate({
     rules: {
       name: "required",
       email: {
         required: true,
         email: true,
         remote: {
           url: "ajax.php",
           type: "post"
         }
       }
     },
     messages: {
       email: {
         remote: "Email already exists"
       }
     }
   });

ajax.php

<?php
header('Content-Type: application/json');

$valid = null;

echo json_encode($valid);

永远不要提交此表单,因为ajax.php总是返回false。但是,尽管显示了错误“电子邮件已存在”,但输入名称和有效的电子邮件仍将提交表单。

参考方案

以下小提琴是否按预期工作?
您可以将网址改为true或false:

url: '/echo/js/?js=[null|true|false]',

https://jsfiddle.net/ww0zh9jm/2/

..您必须投放外部资源(Fiddle删除了它们):
https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js
https://ajax.aspnetcdn.com/ajax/jquery.validate/1.15.0/jquery.validate.min.js

PHP-MySQL结果转换为JSON - php

我试图了解如何将MySQL结果转换为JSON格式,以便以后可以在Javascript中使用此JSON来构建HTML表。但是我的代码只是产生大量的空值,我还不明白为什么。$result = mysqli_query($con, "SELECT * FROM Customers"); $test = json_encode($result);…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

jQuery Ajax PHP重定向到另一个页面 - php

JavaScript文件:$.ajax({ type: "POST", url: "ajax.php", data: dataString, success: function(r) { $("#div").html(r); } }); 我想在成功的情况下将页面重定向到new.php,所以在我使用a…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…