什么jQuery的1.9改为引起$就调用失败,语法错误(What changed in jQuery

2019-08-07 21:37发布

我正在做一个REST删除通话,它返回一个204的jQuery 1.8.3这个工程,并点击了request.done回调。 但是,如果使用1.9它跟在textStatus一个parsererror和“语法错误:输入意外结束”来request.fail在errorThrown。

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的升级指南

jQuery.ajax返回一个空字符串的JSON结果

在此之前1.9,Ajax调用的预期JSON或JSONP的返回数据类型会考虑一个空字符串的返回值是一个成功的案例,但空返回成功处理程序或承诺。 如为1.9,空字符串返回JSON数据被认为是畸形的JSON(因为它是); 现在,这将抛出一个错误。 使用错误处理程序来捕获这样的情况。

所以,如果除去具体的数据类型

dataType: "json",

它的工作原理的jQuery 1.8.3和1.9。

Answer 1:

一个HTTP 204响应是不是空字符串:它意味着不存在数据。 这是一个用于删除和更新操作有效的响应 。

这看起来像一个在JQuery的1.9引入了错误 。

究其原因除去类型属性修正,这是因为当它被设置为“JSON” JQuery的尝试解析使用JSON.parse和失败结果的内容。 从售票:

因为回归是由于与本地JSON.parse(抛出异常的空/未定义值)parseJSON的重新调整这不会失败,任何其他的dataType不是“JSON”。

不要试图在通过StatusCode属性增加了204处理器的票建议的解决方法,因为无论是处理程序错误处理程序将被触发。 一种可能的解决方案如下:

    $.ajax(url, {
    type: "DELETE",
    dataType: "json",
    error: function (error) {
        if (error.status === 204) {
            // Success stuff
        }
        else {
            // fail
        }
    }});


Answer 2:

我有一个非常类似的问题,你帮我找到我的答案 - 所以谢谢你。 我的解决方案,但是略有不同,所以我想我会分享。

如问题所说,JQuery的网站上这样说的:

在此之前1.9,Ajax调用的预期JSON或JSONP的返回数据类型会考虑一个空字符串的返回值是一个成功的案例,但空返回成功处理程序或承诺。 如为1.9,空字符串返回JSON数据被认为是畸形的JSON(因为它是); 现在,这将抛出一个错误。 使用错误处理程序来捕获这样的情况。

我JSON数据传递给一个方法我用“空白”作为返回类型服务器上,因为我并不需要在成功函数返回的数据做任何事情。 在JQuery的1.9 +在AJAX请求通过JSON时,您不能再返回null。 这不过JQuery的以前的版本是可能的。

要停止收到错误并获得成功的功能,而不是火,你必须只需在您的AJAX请求返回有效JSON。 不要紧,你传递什么,只要它是有效的,因为(对我来说反正)你不使用返回的数据。



Answer 3:

这个问题似乎是jQuery的对待204响应为“×”的空体(其中内容长度为0)。 这是一种解释,但不足之处是,“”得到像任何其他响应字符串处理。 所以,如果你调用jQuery.ajax()与数据类型:JSON选项,jQuery的尝试“”转换为一个对象,并抛出一个异常(“”是无效的JSON)。

jQuery的捕捉异常和恢复,但如果你喜欢完全避免异常(在你的开发环境),你可能会做一些像下面这样。 添加的“转换器”选项jQuery.ajax(),并用它来改变“”以空值(当我这样做的数据类型为JSON)响应。 就像是 :

var ajax_options =
    {
        /* ... other options here */
        "converters" :
            {
                "text json" :
                    function( result )
                    {
                        if ( result === "" ) result = null;
                        return jQuery.parseJSON( result );
                    }
            }
    };

var dfd = jQuery.ajax( ajax_options );


文章来源: What changed in jQuery 1.9 to cause a $.ajax call to fail with syntax error
标签: jquery-1.9