【问题标题】:Form validation in CodeIgniter from AJAX request is failing来自 AJAX 请求的 CodeIgniter 中的表单验证失败
【发布时间】:2019-02-11 09:24:19
【问题描述】:

我的 PHP 和 jQuery 代码出现如下错误:

jQuery:

$('#form').submit(function(e){
    e.preventDefault();
    var me = $(this);
    var data = me.serialize();
    $.ajax({
        method :'POST',
        url:me.attr('action'),
        data:{data},
        dataType:'json',
        async:false,
        success:function(data){
            alert(data.success);
            if(data.success == true){
                alert('true');
            }
            else{
                alert('false');
            }
        }
    });
});

HTML 表单:

    <?= form_open('practice/check', array('id'=>'form'))?>
    <input type="text" name="username">
    <input type="password" name="password">
    <button type="submit" name="button" id="submit">click</button>
    <?= form_close();?>

PHP 控制器:

public function check(){
    $this->load->library('form_validation');
    $data= array('success'=>false, 'message'=>array());
    $this->form_validation->set_rules('username','Username','trim|required');
    $this->form_validation->set_rules('password','Password','required');

    if($this->form_validation->run() == false){
      foreach ($_POST as $key => $value) {
        $data['message'][$key] = form_error($key);
      }
    }
    else{
      $data['success'] = true;
    }
    echo json_encode($data);
}

当 jquery 代码中发生警报事件时,即使字段已填满,也总是错误返回..请帮助我并提前感谢..

【问题讨论】:

  • 与您的问题无关,但请不要使用async:false。这在您的代码中不是必需的,但它会在请求发生时冻结浏览器的 UI,从而造成糟糕的用户体验。它现在在大多数浏览器中也已被弃用,无论如何它都会在某个时候停止工作。
  • 这里输入错误..
  • 请提出解决方案
  • 我已经在下面发了答案,你可以看看
  • 答案对您有帮助吗?如果是这样,请记住将其标记为“已接受”。如果它没有帮助,请添加评论,也许我们可以修复它。谢谢。

标签: php jquery ajax codeigniter serialization


【解决方案1】:

你需要改变

data: { data }

data: data

在您的 AJAX 代码中。

您的版本正在做的是将数据包装在一个额外的对象中。这会导致在请求正文中将一个名为“data”的变量提交给服务器,如下所示:

data=username%3Duser123%26password%3Dabcdef

当你真正想要的是这样的:

username=user123&password=abcdef

因此,PHP 无法识别您发送给它的值。它只能看到一个名为“data”的变量,就它而言,它包含一个随机字符串。它需要能够分别查看“用户名”和“密码”变量。

如果您在打开网络工具的情况下查看此 JSFiddle http://jsfiddle.net/jcx2Ly5e/3/ - 提交表单并注意对“test.php”的两个请求。第一个是不正确的,第二个是正确的。查看每个请求正文的内部以查看差异。

附:您会注意到,这些都与 JSON 无关。您的 PHP 返回 JSON,但表单数据以标准 form-url-encoded 格式提交。 JSON 不是问题的一部分,因此我编辑了您的问题以将其删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多