Is it possible to extend jQuery 1.3 to include the parseJSON
function from 1.4.1+, 开发者_JAVA技巧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.
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.
You could use Crockfords implementation: https://github.com/douglascrockford/JSON-js
Or here, for a direct link: https://github.com/douglascrockford/JSON-js/blob/master/json_parse.js
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.
精彩评论