Php 使用$.post函数进行Jquery实时输入验证

Php 使用$.post函数进行Jquery实时输入验证,php,javascript,jquery,Php,Javascript,Jquery,大家好: 我是Jquery和web开发的新手,所以请耐心听我说。 我想在我的网站上用Jquery实现实时输入验证。也许我在这篇文章中有一些语法错误,但我确信我的真实代码中没有任何语法错误 这就是我所拥有的,每当用户输入非空的内容时,就会调用错误并向服务器PHP+MySQL发出post请求,以检查输入值是否已经存在。按下“提交”按钮时,也会再次使用该错误 在我按下submit按钮之前,它工作得非常好。如果输入已存在的内容,则不会提交表单。但是,如果我输入了新的内容,即使数据仍然被插入到数据库中,我

大家好: 我是Jquery和web开发的新手,所以请耐心听我说。 我想在我的网站上用Jquery实现实时输入验证。也许我在这篇文章中有一些语法错误,但我确信我的真实代码中没有任何语法错误

这就是我所拥有的,每当用户输入非空的内容时,就会调用错误并向服务器PHP+MySQL发出post请求,以检查输入值是否已经存在。按下“提交”按钮时,也会再次使用该错误

在我按下submit按钮之前,它工作得非常好。如果输入已存在的内容,则不会提交表单。但是,如果我输入了新的内容,即使数据仍然被插入到数据库中,我仍然会得到exists文本。成功后,我将永远获得成功。似乎当我提交时,来自错误的.post请求是在表单的.post请求之后发出的。有人知道如何解决这个错误吗?或者用另一种方法来构造这种类型的输入验证?? 谢谢


有几个问题马上就突出了。 第一个错误函数总是返回false。 第二个$.post是异步的。这意味着它将继续执行代码,同时等待ajax请求的响应。您可以在jquery my中使用$.ajaxSetup{async:false}更改它;在$.post请求之前

下面是一个应该正常工作的代码示例:

$('.unique').change(function(){
    error($(this));
});

function error(obj)
{
    var ok = true;

    if(obj.val().length == 0)
    {
        alert('This field can not be blank');
        ok = false;
    }
    else
    {
        var data = {
          action: 'check',
          input: obj.attr('name'),
          value: obj.val()
        };

        $.ajaxSetup({async:false}); // Force program execution to wait for ajax response 
        $.post('database.php', data, function (reply) {
          if (reply) {
            alert("This " + obj.attr('name') + " already exists");
            ok = false;
          }
          $.ajaxSetup({async:true}); // Setup ajax to be async again
        });
    }
    return ok;
}

//When the user submits the form
$('#info').live('submit', function(e){
    e.preventDefault();
    var ok = true;

    //Passes each input to the error()
    $('.unique').each(function(){
       ok = ok && error($(this));
    });

    if (!ok) { 
      return false;
    }

    $.post('database.php', 'action=insert&' + $(this).serialize(), function(r) {
      alert(reply);
    });
});

我以前也有过这个问题。可以避免此操作以防止出现默认行为:

$('#info').submit(function(e){
e.preventDefault();

var ok = true;
var data = 'action=insert&' + $(this).serialize();

//Passes each input to the error()
$('.unique').each(function{
   var temp = err($(this));
   ok = ok && temp;
});

if(!ok) return false;

$.post('database.php',
       data,
       function(reply){
           alert(reply);
       });
});
这将避免实际提交表单。如果您仍然希望在ajax帖子正常时提交它:

$('#info').submit(function(){
  var theForm = this;
  $.post('database.php',
       data,
       function(reply){
           alert(reply);
           theForm.submit();
       });
});

是的,关于ok变量,这是一个错误,我刚刚修复了它,谢谢。你能编辑你的帖子并包含err函数吗,从我收集的信息来看,这是一个时间问题,每个帖子在验证过程中的结果,您希望在尝试插入操作之前等待每个帖子完成hi Almog I确实在帖子中包含了错误,谢谢这一行=>var temp=err$this;实际上是var temp=error$this??这实际上是错误$this,我刚刚编辑过,谢谢
$('#info').submit(function(){
  var theForm = this;
  $.post('database.php',
       data,
       function(reply){
           alert(reply);
           theForm.submit();
       });
});