jquery-1.9 – 在jQuery 1.9中有什么变化,导致$.ajax调用失败,出现语法错误

我正在做一个REST DELETE调用,它返回一个204.在jQuery 1.8.3这工作,并命中request.done回调。但如果我使用1.9它去request.fail与textStatus中的parsererror和errorThrown中的“SyntaxError:Unexpected end of input”。

remove = function (complete) {
            var self = this;
            var request = $.ajax({
              context: self,
              url: "/v1/item/" + itemId,
              dataType: "json",
              type: "DELETE"
            });
            request.done(removeCallback);
            request.fail(function (xhr, textStatus, errorThrown) {
                alert(errorThrown);
            });

        },

任何人都知道在1.9中发生了什么变化,这将导致失败,什么需要改变,以解决它?

所以,回答我自己的问题,看起来这是事实上的问题:

jQuery upgrade guide

jQuery.ajax returning a JSON result of an empty string

Prior to 1.9, an ajax call that expected a return data type of JSON or JSONP would consider a return value of an empty string to be a success case, but return a null to the success handler or promise. As of 1.9, an empty string returned for JSON data is considered to be malformed JSON (because it is); this will now throw an error. Use the error handler to catch such cases.

所以,如果删除dataType

dataType: "json",

它在jQuery 1.8.3和1.9中工作。

HTTP 204响应不是空字符串:表示没有数据。这是一个valid response for delete and update operations

这看起来像一个bug introduced in JQuery 1.9

删除dataType属性的原因是因为当它设置为“json”时,JQuery尝试使用JSON.parse解析内容并作为结果失败。从票:

This won’t fail with any other dataType than “json” because the
regression is due to the re-alignment of parseJSON with native
JSON.parse (throwing an exception for null/undefined values).

不要尝试在通过statusCode属性为204添加处理程序的故障单中建议的解决方法,因为该处理程序和错误处理程序都将被触发。可能的解决方案如下:

    $.ajax(url, {
    type: "DELETE",
    dataType: "json",
    error: function (error) {
        if (error.status === 204) {
            // Success stuff
        }
        else {
            // fail
        }
    }});
http://stackoverflow.com/questions/14468704/what-changed-in-jquery-1-9-to-cause-a-ajax-call-to-fail-with-syntax-error

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:jquery-1.9 – 在jQuery 1.9中有什么变化,导致$.ajax调用失败,出现语法错误