我正在进行 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.ajax 返回一个空字符串的 JSON 结果
在 1.9 之前,预期返回数据类型为 JSON 或 JSONP 的 ajax 调用会将空字符串的返回值视为成功案例,但会向成功处理程序或承诺返回 null。从 1.9 开始,为 JSON 数据返回的空字符串被认为是格式错误的 JSON(因为它是);这现在将引发错误。使用错误处理程序来捕获此类情况。
所以,如果删除 dataType
dataType: "json",
它适用于 jQuery 1.8.3 和 1.9。