jQuery ajax:error runs even if the response is OK 200

后端 未结 5 422
轮回少年
轮回少年 2021-01-17 15:21

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:

相关标签:
5条回答
  • 2021-01-17 15:58

    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;
    }
    
    0 讨论(0)
  • 2021-01-17 15:58

    Use ajaxSuccess instead of ajax:success, and ajaxError instead of ajax:error for your eventTypes.

    See here: http://docs.jquery.com/Ajax_Events

    0 讨论(0)
  • 2021-01-17 16:08

    (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.

    0 讨论(0)
  • 2021-01-17 16:17

    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.

    0 讨论(0)
  • 2021-01-17 16:20
    1. Check that $.ajax's datatype is set to jsonp

    2. Try to return {email:"ahsgah@ahsgh.com"}

    0 讨论(0)
提交回复
热议问题