ajaxjsonjquery-1.5jqxhr

Why is jqXHR.responseText returning a string instead of a JSON object?


I have an $.ajax() request with the dataType set to "json." The server is returning JSON with the correct mime type of "application/json." And yet the responseText in my jqXHR object is always a string. What am I doing wrong? Is this how it's supposed to work?

Here's how I'm making the call:

var options = { 
    dataType:'json',
    type: 'GET',
    url: "http://example.com/api/"
};

var key = "PassToCallback";

var jqXHRObject =  $.ajax(options).then(
    function(data, textStatus, jqXHR, key) {
        this.success(data, textStatus, jqXHR, key);
    },
    function(jqXHR, textStatus, errorThrown) { 
        this.error(jqXHR, textStatus, errorThrown);
    }
);

console.log(jqXHRObject.getResponseHeader("content-type")); // application/json
console.log(typeof jqXHRObject.responseText); // string

So I have have to do a $.parseJSON(jqXHRObject.responseText) to get an actual object. This seems unnecessary as $.ajax() should be automatically converting responseText according to the docs. Thanks!


Solution

  • I had the same problem. I returns a string because it formulated from an exception. E.g. I use a kernel listener with serialization to json on my Symfony2 project. Which is correct for proper REST headers.

    Anyway, just parse it; this works for me:

    $.ajaxSetup({
        "error": function(jqXHR, status, thrownError) {
            alert('error');
            var responseText = jQuery.parseJSON(jqXHR.responseText);
            console.log(responseText);
        }
    });