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

前端之家收集整理的这篇文章主要介绍了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",error: function (error) {
        if (error.status === 204) {
            // Success stuff
        }
        else {
            // fail
        }
    }});
原文链接:https://www.f2er.com/jquery/184769.html

猜你在找的jQuery相关文章