不使用MVC,我会有一个页面有一些jQuery,它对特定的php页面进行ajax调用,如:
$(document).ready(function(){
$( "#login" ).on("click", function(e) {
e.preventDefault();
var form = $( "#loginForm" ).serialize();
$.ajax({
url: 'somePage.php',
type: 'POST',
dataType: 'json',
data: form,
})
.done(function (data) {
if(!data.success) {
console.log(data.message);
} else {
console.log(data.message);
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
console.log(textStatus + ': ' + errorThrown);
console.warn(jqXHR.responseText);
});
});
});
somePage.php看起来像:
if($_POST) {
$response = array();
$message = "";
if(empty($_POST['name'])) {
$message .= "Name required";
}
if($message) {
$response['success'] = false;
$response['message'] = $message;
} else {
// add data to database
$response['success'] = true;
$response['message'] = "Success";
}
echo json_encode($response);
}
我是MVC和OOP的新手,我只是想知道如何更改它,因为我需要在控制器中进行验证,然后将数据发送到模型以进行数据库插入。这里ajax的目的只是在提交表单时阻止页面刷新,如果验证失败则显示错误消息,如果通过则显示成功消息,然后将数据插入数据库。
这就是我的控制器目前对非ajax提交的看法:
public function test() {
if($_POST) {
$data = [
'email' => trim($_POST['email']),
'email_err' => ''
];
if(empty($_POST['email'])) {
$data['email_err'] = 'Email required';
}
if(empty($data['email_err'])) {
//send data to model
} else {
$this->view('users/login', $data);
}
} else {
$data = [
'email' => '',
'email_err' => ''
];
$this->view('users/login', $data);
}
}
所以,问题基本上是如何获得对控制器和模型的ajax响应?错误消息将显示在视图中。