Question

Is it possible to extend jQuery 1.3 to include the parseJSON function from 1.4.1+, and have it function the same way as it does in jQuery 1.4.1+? How would I go about that?

I have some sites where I have to use jQuery 1.3, but I have a tool that requires parseJSON, which was only introduced in jQuery 1.4.1. I vaguely know that I should be taking parseJSON from 1.4.1+ and trying to make it a plugin, but I don't know how to do that.

Was it helpful?

Solution

You could make it a plugin like this:

$.extend({
    error: function( msg ) { throw msg; },
    parseJSON: function( data ) {
        if ( typeof data !== "string" || !data ) {
            return null;
        }    
        data = jQuery.trim( data );    
        if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
            .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
            .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {    
            return window.JSON && window.JSON.parse ?
                window.JSON.parse( data ) :
                (new Function("return " + data))();    
        } else {
            jQuery.error( "Invalid JSON: " + data );
        }
    }
});

You can test it here.
This code's adopted from jQuery 1.4.4 - found here. After including the above with jQuery 1.3 as your question has, just use $.parseJSON() as you normally would...or in your case, just include the plugins after the above code and $.parseJSON() will be present for them to use.

OTHER TIPS

Is it impossible for you to edit the code that uses 1.3? The jQuery.json plugin provides $.toJSON and $.evalJSON, which are equivalent to the new ones from 1.4. You could try to use the native JSON.parse and JSON.stringify in browsers where it's supported. In older browser you'll need to include JSON2 to add JSON.parse and JSON.stringify support to these browsers.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top