AnApprentice
AnApprentice

Reputation: 110960

jQuery Handling JSON responses

I have the following from the server response:

{"invalid_emails":["adsasdasd"],"result":"success","valid_emails":["[email protected]"]}

But this errors?

            $.ajax({
                type: 'POST',
                url: '/users/invitation',
                data: $('#user_invitation_new').serialize(),
                success: function(e) {
                    jsonObject = jQuery.parseJSON(e);
                    jsonObject.valid_emails
                    jsonObject.invalid_emails

I get the following error: Uncaught TypeError: Cannot read property 'valid_emails' of null

Upvotes: 0

Views: 6119

Answers (4)

itsazzad
itsazzad

Reputation: 7277

Just try including

dataType: 'json',

Upvotes: 0

Jason
Jason

Reputation: 52523

You may not have to parse that JSON, as it is already a JSON object. try doing

var emails = e.valid_emails;

If this still does not work, include dataType: 'json' in your .ajax() declaration.

Upvotes: 2

Dave Ward
Dave Ward

Reputation: 60580

As Jason and Jonathon mentioned, you should not manually deserialize the JSON. Depending on what version of jQuery you're using, jQuery will automatically deserialize JSON based on the response's content-type header. So, you're probably trying to $.parseJSON() something that's already an object, not a JSON string.

To be sure that jQuery does this automatic deserialization for you, add a dataType parameter to the $.ajax() call:

$.ajax({
  type: 'POST',
  dataType: 'json',
  url: '/users/invitation',
  data: $('#user_invitation_new').serialize(),
  success: function(response) {
    console.log(response.valid_emails);
    console.log(response.invalid_emails);
  }
});

Upvotes: 6

Jonathon Bolster
Jonathon Bolster

Reputation: 15961

If your server responds with the JSON then you should have to run jQuery.parseJSON(e);. The e parameter might already be the about so try this for your success handler:

success: function(e)
    var valEmails = e.valid_emails,
        invalEmails = e.invalid_emails;
};

Upvotes: 0

Related Questions