来自 AJAX 请求的 CodeIgniter 中的表单验证失败



我的PHP和jQuery代码发生错误,如下所示:

j查询:

$('#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');
}
}
});
});

网页表单:

<?= 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代码中时,总是错误返回甚至填充字段..请帮助我并提前感谢..

你需要改变

data: { data }

data: data

在您的 AJAX 代码中。

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

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

当你真正想要的是这个:

username=user123&password=abcdef

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

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

附言正如您会注意到的,这些都与 JSON 无关。您的 PHP 返回 JSON,但表单数据以标准的表单 url 编码格式提交。JSON 不是问题的一部分,所以我编辑了您的问题以删除它。

相关内容

  • 没有找到相关文章

最新更新