diff options
-rw-r--r-- | src/core.js | 18 | ||||
-rw-r--r-- | test/unit/ajax.js | 2 |
2 files changed, 11 insertions, 9 deletions
diff --git a/src/core.js b/src/core.js index 9312ee288..205a6e307 100644 --- a/src/core.js +++ b/src/core.js @@ -515,16 +515,18 @@ jQuery.extend({ // 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, "")) ) { - - // Try to use the native JSON parser first - return window.JSON && window.JSON.parse ? - window.JSON.parse( data ) : - (new Function("return " + data))(); + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return (new Function( "return " + data ))(); } else { jQuery.error( "Invalid JSON: " + data ); diff --git a/test/unit/ajax.js b/test/unit/ajax.js index 7c572a32c..e9c7a00c5 100644 --- a/test/unit/ajax.js +++ b/test/unit/ajax.js @@ -1600,7 +1600,7 @@ test("jQuery.ajax() - malformed JSON", function() { }, error: function(xhr, msg, detailedMsg) { equals( "parsererror", msg, "A parse error occurred." ); - ok( /^Invalid JSON/.test(detailedMsg), "Detailed parsererror message provided" ); + ok( /^(Invalid|SyntaxError|exception)/i.test(detailedMsg), "Detailed parsererror message provided" ); start(); } }); |