diff options
Diffstat (limited to 'src/core.js')
-rw-r--r-- | src/core.js | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/core.js b/src/core.js index 5564a9870..2f5908b55 100644 --- a/src/core.js +++ b/src/core.js @@ -488,27 +488,32 @@ jQuery.extend({ }, 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, "")) ) { + if ( data === null ) { + return data; + } - return ( new Function( "return " + data ) )(); + if ( typeof data === "string" ) { + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + if ( 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 ); }, |