Fat Free框架jquery Ajax发布请求不起作用

时间:2016-02-20 22:23:06

标签: jquery json ajax fat-free-framework

我是无脂肪框架的新手,这是我第一次使用它。我正试图在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>');
                  }
                }
            });
        });
    });

1 个答案:

答案 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>');
}