I have a form which submit a form via AJAX with :remote => true. Looking at the server log and FireBug, I get the response 200 OK and it returns JSON in the form of:
JSON.parse('') throws an error. To me, that is stupid, it should return undefined. I added this code to my app
#HACK JSON.parse('') should return undefined, not throw an error
_parse = JSON.parse
JSON.parse = (str) =>
unless str == ''
_parse.apply JSON, arguments
or for u poor people not using coffeescript ( untested )
//HACK JSON.parse('') should return undefined, not throw an error
var _parse = JSON.parse
JSON.parse = function(str) {
if (str !== '')
return _parse.apply(JSON, arguments);
else
return undefined;
}
Use ajaxSuccess
instead of ajax:success
, and ajaxError
instead of ajax:error
for your eventTypes.
See here: http://docs.jquery.com/Ajax_Events
(On Rails 5.2 and jQuery 2) I spent an hour comparing two bits of UJS code side-by-side to no avail: both return a similar format Javascript function call (to update the front-end), and a status of 200 but one triggers ajax:error
and the other doesn't. I was able to eliminate the problem by switching from jquery_ujs to rails-ujs in the application.js manifest:
//= require jquery2
// require jquery_ujs # Removed this by taking away '='
//= require rails-ujs
Note the hyphen vs the underline!
Now both calls behave the same (correct) way. I hope this helps someone else.
If the server returns something that isn't valid JSON, such as a single space, jQuery will generate a parse error and consider it a failed request even if the status code is 200.
As of jQuery 1.9 a completely empty response is considered a failed request when the type is set to JSON since an empty string is invalid JSON. See http://jquery.com/upgrade-guide/1.9/#jquery-ajax-returning-a-json-result-of-an-empty-string.
Check that $.ajax's datatype is set to jsonp
Try to return {email:"ahsgah@ahsgh.com"}