2012-11-14 47 views
1

我一直在通过返回json编码数组来处理成功/错误消息作为响应,但是突然想到,这可能不是处理通知的正确方式。使用Codeigniter处理ajax响应

例如,我的控制器看起来就像这样:

public function controller_name() { 
    //validate form input 
    $this->form_validation->set_rules('id', 'id', 'required|is_natural_no_zero'); 

    // if validation was successful with no errors 
    if ($this->form_validation->run() && $this->model_name->method()) { 

     $this->data['status'] = 'success'; 
     $this->data['message'] = 'This is the success message'; 
     echo json_encode($this->data); 

    } else { 
     $this->data['status'] = 'error'; 
     $this->data['message'] = validation_errors(); 
     echo json_encode($this->data); 
    } 
} 

然后jQuery的:

$.ajax({ 
    url: url, 
    type: 'POST', 
    data: data, 
    success: function (r) { 

     json = $.parseJSON(r); 

     if (json.status == 'success') { 
      if (json.message == 'added') { 
       $this.addClass('success'); 
      } else { 
       $this.removeClass('success'); 
      } 
     } else { 
      console.log('There was an error') 
     } 

什么是最好的实践方式做到这一点?我可以抛出异常来使用ajax错误吗?

回答

7

发送错误的HTTP状态代码应当触发jQuery的Ajax错误处理程序:

public function controller_name() { 
    //validate form input 
    $this->form_validation->set_rules('id', 'id', 'required|is_natural_no_zero'); 

    // if validation was successful with no errors 
    if ($this->form_validation->run() && $this->model_name->method()) { 
     $this->data['message'] = 'This is the success message'; 
    } else { 
     $this->output->set_status_header('400'); //Triggers the jQuery error callback 
     $this->data['message'] = validation_errors(); 

    } 
    echo json_encode($this->data); 
} 

JS:

$.ajax({ 
    url: url, 
    type: 'POST', 
    data: data, 
    success: function (r) { 
     var json = $.parseJSON(r); 

    }, 

    error: function(jqXhr) { 
     if(jqXhr.status == 400) { //Validation error or other reason for Bad Request 400 
      var json = $.parseJSON(jqXhr.responseText); 
     } 
    } 
}); 
+0

清楚,当然似乎更清洁,我不知道为什么它从来没有想过我面前。 – Motive

+0

是的,我有很多代码检查成功回调中的错误 – Esailija