X-Git-Url: http://git.asbjorn.biz/?a=blobdiff_plain;f=src%2Fajax.js;h=73e1db689c1797bbe9fecd418e79e26cdd305489;hb=366039a6f05ffa09630e95be604e3f4f26a33bd6;hp=35d83e4fabbbd62aa0d92a8303ef2c587362aade;hpb=c68fbc2071f67876edbb3fca202362aecb82ca9c;p=jquery.git diff --git a/src/ajax.js b/src/ajax.js index 35d83e4..73e1db6 100644 --- a/src/ajax.js +++ b/src/ajax.js @@ -570,20 +570,26 @@ jQuery.extend({ // The filter can actually parse the response if ( typeof data === "string" ) { - // If the type is "script", eval it in global context - if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) { - jQuery.globalEval( data ); - } - // Get the JavaScript object, if JSON is used. if ( type === "json" || !type && ct.indexOf("json") >= 0 ) { // Try to use the native JSON parser first - try { - data = JSON.parse( data ); + if ( window.JSON && window.JSON.parse ) { + data = window.JSON.parse( data ); - } catch(e) { - data = (new Function("return " + data))(); + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + } else 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, ""))) { + data = (new Function("return " + data))(); + + } else { + throw "JSON.parse"; } + + // If the type is "script", eval it in global context + } else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) { + jQuery.globalEval( data ); } }