33

I am trying to preform some basic operations with jQuery and JSON. Presently having difficulty with jQuery accepting JSON response from my play framework application. Below is a simplified version of the code that still produces the error.

$.ajax({
    type: 'POST',
    url: "@{FrontEnd.isUsernameAvailable()}",
    data: "name=thisnameisavailable",
    cache: false,
    success: function(data) {
        console.log("Success... ");
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log("Error... " + textStatus + "        " + errorThrown);
    },
    dataType: 'json'
});

The error callback is always triggered. It displays

Error... parsererror jQuery15001997238997904205_1298484897373 was not called

Inspecting the returned JSON through Firebug shows no errors and various JSON lint tools also validate. Changing dataType to "text" makes success be called. But I am trying to use the isUsernameAvailable call as part of jQuery validation plugin so I need it to return valid JSON.

2
  • Are you sure the response is of type application/json (I think the answer is yes ;)) and your json is like { "field":"value", ... }... the double quote are sometimes important if your values are string typed and not boolean or int... and no orphaned ","... Anyway, you seem to have a workaround! Commented Feb 24, 2011 at 9:37
  • In your question my answer... My php was giving back using echo simple text so changing my dataType to 'text' did the job. Thanks :) Commented Aug 6, 2013 at 7:43

4 Answers 4

34

Maybe I'm misunderstanding, but couldn't you set the dataType to text and JSON.parse() the returned data?

success: function(data) {
    data = JSON.parse(data);
    // process data
},

Edited to add generally agreed upon solution (previously a comment only):

I just took a look at api.jquery.com/jQuery.ajax and it looks like with jQuery 1.5 you can do a type conversion of sorts. "multiple, space-separated values: As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use "text xml" for the dataType." Maybe you can try "text json".

Sign up to request clarification or add additional context in comments.

8 Comments

That may be the direction I need to go in. The reason I "need" to use "json" is because the jQuery Validation plugin I am using requires the remote validation to return JSON.
I just took a look at api.jquery.com/jQuery.ajax and it looks like with jQuery 1.5 you can do a type conversion of sorts. "multiple, space-separated values: As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use "text xml" for the dataType." Maybe you can try "text json".
I just changed "json" to "text json" in the jQuery Validation plugin code itself and everything works perfectly. Thanks for the answer, but I am still confused why "json" was not working. The Content-Type header was set to application/json.
Same issue today, the incompatible validation plugin was the cause, in this case the one that comes with ASP.NET MVC3.
dosboy, you should add your comment to the answer, dude. that saved me from hours of looking for a solution... there are too many repeated (or just empty) questions and answers out there pointing to another direction!
|
12

I got the same error as soon as I upgraded to jQuery 1.5. It turns out that my problem is because I'm also using the jquery validation plugin, which is not compatible with jQuery 1.5. If I remove the jquery validation plugin, $.ajax() with dataType json works fine.

More information about the jquery validation plugin incompatibility here: http://bugs.jquery.com/ticket/8118

5 Comments

This took me a while to find too, this was the issue, the conflict in jquery.validate.
The new version (1.8) of jQuery Validation fixes this issue and is compatible with jQuery 1.5.x. More information available at: jquery.bassistance.de/validate/changelog.txt
This indeed is the correct answer and should be marked as such. Thanks JonnyO!
Thank you! I've been fighting with this for two hours now trying to figure out what I was doing wrong.
@Jim: I downloaded the new version of jQuery Validation and the problem is still present if you use the jquery.validate.min.js file. It seems to work if you use the jquery.validate.js file.
3

I also got "parsererror jQueryNNNN_NNN was not called" (using jsonp and jQuery 1.7.2) The reason was that one of the values in the returned json structure contained newlines. Hope this helps someone.

Comments

2

I got parseerror, because url contained a callback=? part. This is a magic string which activates JSONP functionality.

As my server side's REST API changed from JSONP to JSON, the data format returned from it was no longer compatible with jQuery.getJSON(..) with callback=?. In this situation, jQuery.getJSON(..) won't call the success callbacks, but the fail callbacks instead.

I resolved this issue by removing the callback=? part from the url parameter.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.