1

jQueryはバージョン1.9.0の時点で$.parseJSONの実装を変更しており、以前のバージョンのjQueryがnullと空の文字列を解析する方法に本当に依存していました。たとえば、jQueryは例外をスローせず、nullと空の場合はnull値を返していました。ストリング。

執筆時点で1.9.1であるjQueryの最新バージョンを利用したいと思いますが、$。parseJSONの実装を置き換えます。

jQueryからの変更を示すドキュメント:http://api.jquery.com/jQuery.parseJSON/

$.parseJSON関数の「自然な」バージョンを同じ名前の別の実装/関数に置き換えるようにjQueryに指示するために使用できるJavaScriptはありますか...jQuery1.8.3のバージョンですか?

http://code.jquery.com/jquery-1.8.3.jsには、必要な関数の実装があります。

4

3 に答える 3

3

必要な場合は、次のようにします。

jQuery._parseJSON = jQuery.parseJSON;

jQuery.parseJSON = function( data ) {

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

    return jQuery._parseJSON( data );

}
于 2013-03-27T03:58:00.803 に答える
2

私はそれをお勧めしませんが、それでもやりたいのなら

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ファイルの後にこのファイルを含めます

于 2013-03-27T03:49:44.923 に答える
0

あなたの質問がjQueryの$.ajax()メソッドのコンテキストで発生する$ .parseJSON()呼び出しに関連している場合は、ここに良い解決策があります。次のようにコンバーターを設定することで、JSON文字列からJSオブジェクトへのデフォルトの変換をオーバーライドできます。

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

$ .ajax()メソッドに関してこの質問をしていない場合は、気にしないでください。:-)

于 2014-01-29T20:51:51.140 に答える