Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting json on Ajax response callback

I am trying to create a little ajax chat system (just for the heck of it) and I am using prototype.js to handle the ajax part.

One thing I have read in the help is that if you return json data, the callback function will fill that json data in the second parameter.

So in my php file that gets called I have:

header('Content-type: application/json');

if (($response = $acs_ajch_sql->postmsg($acs_ajch_msg,$acs_ajch_username,$acs_ajch_channel,$acs_ajch_ts_client)) === true)
    echo json_encode(array('lastid' => $acs_ajch_sql->msgid));
else
    echo json_encode(array('error' => $response));

On the ajax request I have:

onSuccess: function (response,json) {
                alert(response.responseText);
                alert(json);    
            }

The alert of the response.responseText gives me {"lastid": 8 } but the json gives me null.

Anyone know how I can make this work?

like image 298
AntonioCS Avatar asked May 17 '09 22:05

AntonioCS


2 Answers

This is the correct syntax for retrieving JSON with Prototype

onSuccess: function(response){
   var json = response.responseText.evalJSON();
}
like image 145
Jose Basilio Avatar answered Sep 28 '22 09:09

Jose Basilio


There is a property of Response: Response.responseJSON which is filled with a JSON objects only if the backend returns Content-Type: application/json, i.e. if you do something like this in your backend code:

$this->output->set_content_type('application/json');
$this->output->set_output(json_encode($answer));
//this is within a Codeigniter controller

in this case Response.responseJSON != undefined which you can check on the receiving end, in your onSuccess(t) handler:

onSuccess:function(t) {
  if (t.responseJSON != undefined) 
  {
    // backend sent some JSON content (maybe with error messages?)
  }
  else 
  {
    // backend sent some text/html, let's say content for my target DIV
  }
}

I am not really answering the question about the second parameter of the handler, but if it does exist, for sure Prototype will only provide it in case of proper content type of the response.

like image 25
Yuri Makassiouk Avatar answered Sep 28 '22 09:09

Yuri Makassiouk