R_Tobes
R_Tobes

Reputation: 69

ajax always runs success even when error is returned

I have an AJAX script that should insert data into a mysql database when users are logged in. However it is currently running the success function, even when 'success' => 'false' is returned in the console.

Her is my code

 $(document).ready(function() {

$("#addfav").click(function() {

 var form_data = {heading: $("#vidheading").text(), embed : $("#vidembed").text()};

  jQuery.ajax({
      type:"POST",
      url:"http://localhost/stumble/Site/add_to_fav",
      dataType: "json",
      data: form_data,
      success: function (data){

              alert("This Video Has Been Added To Your Favourites");
          console.log(data.status);

      },

    error: function (data){
           if(data.success == false){
           alert("You Must Be Logged In to Do That");
        console.log(data.status); 


        };
    }
  });
})

}) 

here is the php, bear in mind my project is in codeigniter.

public function add_to_fav(){
 header('Content-Type: application/json');

      $this->load->model('model_users');
      $this->model_users->add_favs();    
} 

and this is the actual model for adding data to db

    public function add_favs(){
     if($this->session->userdata('username')){
     $data = array(
        'username' => $this->session->userdata('username'),
      'title' => $this->input->post('heading'),
      'embed' => $this->input->post('embed')
      );

      $query = $this->db->insert('fav_videos',$data);
      echo json_encode(array('success'=>'true'));
        } else {

         echo json_encode(array('success'=>'false'));
      }

  }    

Thank you for any suggestions!

Upvotes: 1

Views: 457

Answers (2)

user1094553
user1094553

Reputation: 796

You have to remember error that occurs for asynchronous requests and errors that occur for PHP backend are different. Your error occurs at PHP-level, and PHP returns valid HTML as far as the javascript frontend is concerned. You need to check if the "success" variable in the returned JSON is true.

Upvotes: 0

Quentin
Quentin

Reputation: 943651

You aren't returning an error.

You are returning a 200 OK with the data {"success": "false"}.

You can either handle that in your jQuery success function or send a different status code (it looks like a 403 error would fit here).

Upvotes: 5

Related Questions