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 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中工作。
解决方法
这看起来像一个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",error: function (error) { if (error.status === 204) { // Success stuff } else { // fail } }});