【问题标题】:validate form without refreshing page and showing error through validationEngine验证表单而不刷新页面并通过validationEngine显示错误
【发布时间】:2012-09-10 12:43:48
【问题描述】:

我在同一页面中使用带有日期选择器的验证引擎。

我添加了一个jQuery.noConflict(); 以使其工作(在代码的开头)。

现在,我需要通过 PHP 文件进行插入,但无需刷新页面,而是在同一验证引擎气泡中显示错误消息(例如,当电子邮件已在 BDD 中注册时)。

  1. 我应该导入 jQuery 以在同一页面中插入 不会引起冲突,或者我可以在已经使用的查询上使用一个吗 出于同样的目的?

  2. 如何通过验证引擎显示服务器响应?

我的代码如下。

$(".btn_newsletter").live('click', function() { 
  $.ajax(
    {
      url: "php/functions/signin.php"+nomfichier,
      success: function(data) { 
        if (data.check==0) {alert('Error : Sorry '); return false;}
        if (data.check==1) {alert('yep!!!');                                                                            
      }
    },
    cache: false,
    type: "POST",
    dataType: 'json'
  });
}

这是我的 PHP 代码。

  $ip= $_SERVER["REMOTE_ADDR"];
  $select = "select * from av_newsletter where email='".$_POST['email']."'";
  $exist = $_BASE->query_array($select);
  if ($exist) { 
    $check = "0";
  }
  else {
    $ajout="INSERT INTO av_newsletter(id,sub_date,email,ip) VALUES (NULL,now(),'$email','$ip')";
    $add=$_BASE->query($ajout);
    if ($add) { 
      $check="1";  
    }
  }

  $return_arr["check"] = $check;
  echo json_encode($return_arr);

它不起作用;我没有警报,但也没有错误。

【问题讨论】:

  • 列出您希望表单执行的所有操作的优先级列表,例如用户名、电子邮件等已被占用。创建一个 PHP 脚本来验证这一点(检查数据库)并返回一个 JSON 响应,如 {'username':'free', 'email':'taken'},在您的表单中处理它以获取通知。
  • 非常感谢,我已经添加了上面的代码,不起作用我没有警报,但也没有错误:/
  • 在第一个 if(data.check==0) 之前放一个 console.log(data),我相信 0 将是一个字符串“0”。也可以使用firefox中的firebug之类的工具来查看结果,而无需一直调试javascript文件中的响应
  • 仍然没有结果,没有错误,(也没有插入):/我认为不包含signin.php答案的变量数据有问题,我不明白为什么:/再次感谢。控制台.日志(数据); if(data.check=='0'){ alert('错误:对不起');返回假; } if(data.check=='1'){ alert('yep!!!'); }
  • 您应该在控制台中看到一些响应,可能是因为您没有使用任何控制台;) 将 console.log(data) 更改为 alert(data);还要在 $.ajax 之前添加一个 alert('testing1234') 来查看点击获取是否被执行

标签: php jquery jquery-validation-engine


【解决方案1】:

如果您对“验证引擎”的了解不深,我建议您使用 this 一个,它多年来一直很好地为我服务,它支持进行远程检查,因此您可以执行以下操作:

$(document).ready(function(){

var save_options = {
    success:        userSaved, //callback function
    url:           '/users/save',
    response:      'json',
    method:        'post'
};

var validationObj = {
    rules: {
        name: "required",
        email: {
        email: true,
            required: true,
            remote: "/user/check_email/"
        }
    },
    messages: {
        name: "Please name yourself",
        email: {
            required: "Please enter your email address",
            email: "Invalid email address",
            remote: "Email already in use."
        }
    },
    errorPlacement:function(error, element) {
        error.appendTo( element.next() );
    },
    submitHandler:  function(form) {
        $(form).ajaxSubmit(save_options);
    },
    success:function(label) {
        label.html(" ").addClass("checked");
    }
};

});

然后在“/users/check_email”端点的 PHP 端,PHP 执行以下操作:

echo $emailExists ? json_encode(false) : json_encode(true);

【讨论】:

  • 哦,谢谢,这似乎很有趣且更简单,在我的情况下,我需要继续使用验证引擎:/ 我相信我将来会使用它而不是验证引擎!
【解决方案2】:

好的,在我们向 cmets 发送垃圾邮件并偏离主题之前,请执行此代码,这应该可以帮助您开始让它最终工作。

$(".btn_newsletter").live('click',function() {
  alert('clicked'); // click is executed
  $.ajax({                           
    url: "php/functions/signin.php"+nomfichier,
    success: function(data) {
      alert(data); // should alert the data
      if(data.check==0){  alert('Error : Sorry '); return false; }
      if(data.check==1){  alert('yep!!!'); }                                                                    
    },
    error: function(request, status, error) {
      alert('failed '+status);
    },
    cache: false,
    type: "POST",
    dataType: 'json'
  });
});

【讨论】:

  • 所以我已经“点击”了警报,但没有提醒数据,这就是为什么我没有任何插入:/
  • 用上面更新的代码重试,添加了错误回调,很可能nomfichier变量不存在,你的url会导致php/functions/signin.phpundefined
  • 网址是对的,我已经删除了这个变量“nomfichier”我问自己是否有任何 jquery 错过了使 $.ajax 工作?
  • 它应该以这种方式工作,没有理由相信 jQuery click 事件被执行,并且 click 回调中的所有内容都没有。如果成功了,也没有触发错误函数,那么肯定是有其他问题,点击按钮时检查错误控制台。
  • 我明白了,它几乎可以工作,唯一的问题是在我的 signin.php 中 $_POST['email'] 是空的,它已经注册了一次 email="" (空)和其他我会失败,因为我的数据库中已经存在空字段电子邮件。我不明白为什么我的 POST 是空的,我应该在 Jquery 中捕获输入的值而不是用表单将其汇总吗? (ps:我的sql rquest中出现了问题,所以我什么也没看到,再次感谢您)
【解决方案3】:

它有效:)

    $(".btn_newsletter").live('click',function() {
              var data ="email="+$('#email').val();

  $.ajax({                           
    url: "php/functions/signin.php"+"?"+data,
    success: function(data) {   
          if(data.check=='1'){  alert('yep!!!'); }                                                                    
          if(data.check=='0'){  alert('Error : Sorry '); return false; }
    },
    cache: false,
    type: "POST",
    dataType: 'json'
  });
});

在我的 signin.php 中,我像这样$email=$_REQUEST['email'] 捕获输入的值 非常感谢!是时候让我了解一下验证引擎如何将其与 :) 联系起来了:)

【讨论】:

    猜你喜欢
    • 2015-07-31
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 1970-01-01
    • 2021-11-16
    • 2012-10-29
    • 1970-01-01
    相关资源
    最近更新 更多