如何用jQuery 1.8.3中的实现替换jQuery 1.9.1的$ .parseJSON函数

时间:2013-03-27 03:35:19

标签: javascript jquery jquery-1.9

从版本1.9.0开始,jQuery改变了它的$ .parseJSON实现,我们真的依赖于早期版本的jQuery解析null和空字符串的方式,例如: jQuery过去没有抛出异常,并且会为null和空字符串返回null值。

我们想使用最新版本的jQuery,在编写本文时是1.9.1,但是要替换$ .parseJSON的实现。

说明jQuery更改的文档:http://api.jquery.com/jQuery.parseJSON/

是否有一些JavaScript可以用来告诉jQuery将$ .parseJSON函数的“自然”版本替换为另一个具有相同名称的实现/函数...来自jQuery 1.8.3的版本?

http://code.jquery.com/jquery-1.8.3.js具有我们需要的功能实现。

3 个答案:

答案 0 :(得分:2)

如果必须,请这样做:

jQuery._parseJSON = jQuery.parseJSON;

jQuery.parseJSON = function( data ) {

    if ( !data || typeof data !== "string") {
        return null;
    }

    return jQuery._parseJSON( data );

}

答案 1 :(得分:1)

我不推荐它,但如果你还想这样做

创建一个jquery-override.js文件并将以下内容添加到其中

jQuery.parseJSON = function( data ) {
        if ( !data || typeof data !== "string") {
            return null;
        }

        // Make sure leading/trailing whitespace is removed (IE can't handle it)
        data = jQuery.trim( data );

        // Attempt to parse using the native JSON parser first
        if ( window.JSON && window.JSON.parse ) {
            return window.JSON.parse( data );
        }

        // Make sure the incoming data is actual JSON
        // Logic borrowed from http://json.org/json2.js
        if ( rvalidchars.test( data.replace( rvalidescape, "@" )
            .replace( rvalidtokens, "]" )
            .replace( rvalidbraces, "")) ) {

            return ( new Function( "return " + data ) )();

        }
        jQuery.error( "Invalid JSON: " + data );
    }

然后在jquery-1.9.1.js文件之后包含此文件

答案 2 :(得分:0)

如果您的问题与jQuery的 $。ajax()方法的上下文中出现的 $。parseJSON()调用有关,那么这是一个不错的解决方案。您可以通过设置如下转换器来覆盖从JSON String到JS Object的默认转换:

$.ajaxSetup({ 
            converters: { "text json": function (jsonString) {
                var jsonObj = mySpecialParsingMethod(jsonString);
                return jsonObj;
            } }
});

如果您没有就$ .ajax()方法问这个问题,那么请不要问。 : - )