我是无脂肪框架的新手,这是我第一次使用它。我正试图在article中解释的无脂框架中使用jquery创建一个ajax post请求。
我已经创建了一个寄存器控制器,它接收后期数据并验证数据,然后插入数据库。如果存在错误,则将错误添加到数组中,如果不存在,则将成功消息作为json返回。
public function register()
{
$f3=Base::instance();
if($this->f3->exists('POST.register')) {
$audit = \Audit::instance();
$user = new User($this->db);
$err = array();
$data = array();
$user_email = $_POST['user_email'];
$user_name = $_POST['user_name'];
$user_pass = $_POST['user_pass'];
if ($audit->isEmpty($user_email)) {
$err['user_email'] = 'Email cannot be empty';
}
if ($audit->isEmpty($user_name)) {
$err['user_name'] = 'Username cannot be empty';
}
if ($audit->isEmpty($user_pass)) {
$err['user_pass'] = 'Password cannot be empty';
}
if(empty($err)) {
$crypt = \Bcrypt::instance();
$user_pass = $crypt->hash($user_pass);
$security_token = $crypt->hash(mt_rand(1,9999999));
$this->f3->set('DATA.user_name',$user_name);
$this->f3->set('DATA.user_email',$user_email);
$this->f3->set('DATA.user_pass',$user_pass);
$save = $user->add('DATA');
if($save) {
$data['success'] = true;
$data['message'] = "Registered";
}
}
else {
$data['success'] = false;
$data['err'] = $err;
}
$this->f3->set('pageTitle','Register');
$this->f3->set('bodyClass','register-page');
$this->f3->set('view','user/register.htm');
echo json_encode($data);
}
else {
$this->f3->set('pageTitle','Register');
$this->f3->set('bodyClass','register-page');
$this->f3->set('view','user/register.htm');
}
}
我用jquery做了一个简单的ajax post请求,它从registerform发送数据。如果我通常没有ajax请求PHP代码是完美的。如果请求是使用ajax进行的,则请求不起作用。可能是什么问题呢?
$(document).ready(function() {
var form = $('#registerForm');
var url = form.attr('action');
var method = form.attr('method');
var data = form.serialize();
form.submit(function(event){
event.preventDefault();
$.ajax({
type : method,
url : url,
data : data,
dataType : 'json',
success: function(data) {
if(!data.success) {
if (data.err.user_email) {
$('#user_name_error').html('<div class="error"> ' + data.err.user_email + ' </div>');
}
}
else {
$('#registerForm').prepend('<div id="thankyou"> ' + data.message + ' </div>');
}
}
});
});
});
答案 0 :(得分:0)
您的代码存在的问题是您希望返回一个JSON对象,但事实上您正在获取一个JSON字符串。
我要做的是使用$ .parseJSON转换从服务器返回的JSON字符串,然后完全按照您的尝试访问它。
例如,您的成功函数将类似于:
success: function(data) {
data = $.parseJSON(data); // <== Include this line
if (!data.success) {
if (data.err.user_email) {
$('#user_name_error').html('<div class="error"> ' + data.err.user_email + ' </div>');
}
}
else {
$('#registerForm').prepend('<div id="thankyou"> ' + data.message + ' </div>');
}