mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Switched to using new Function instead of eval for handling JSON parsing (Fixes bug #4680). Added support for JSON.parse, if it exists (Fixes bug #4429).
This commit is contained in:
parent
a0451f162e
commit
90a87c03b4
20
src/ajax.js
20
src/ajax.js
@ -481,24 +481,32 @@ jQuery.extend({
|
|||||||
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
|
xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
|
||||||
data = xml ? xhr.responseXML : xhr.responseText;
|
data = xml ? xhr.responseXML : xhr.responseText;
|
||||||
|
|
||||||
if ( xml && data.documentElement.tagName == "parsererror" )
|
if ( xml && data.documentElement.tagName == "parsererror" ) {
|
||||||
throw "parsererror";
|
throw "parsererror";
|
||||||
|
}
|
||||||
|
|
||||||
// Allow a pre-filtering function to sanitize the response
|
// Allow a pre-filtering function to sanitize the response
|
||||||
// s != null is checked to keep backwards compatibility
|
// s != null is checked to keep backwards compatibility
|
||||||
if( s && s.dataFilter )
|
if ( s && s.dataFilter ) {
|
||||||
data = s.dataFilter( data, type );
|
data = s.dataFilter( data, type );
|
||||||
|
}
|
||||||
|
|
||||||
// The filter can actually parse the response
|
// The filter can actually parse the response
|
||||||
if( typeof data === "string" ){
|
if ( typeof data === "string" ) {
|
||||||
|
|
||||||
// If the type is "script", eval it in global context
|
// If the type is "script", eval it in global context
|
||||||
if ( type == "script" )
|
if ( type === "script" ) {
|
||||||
jQuery.globalEval( data );
|
jQuery.globalEval( data );
|
||||||
|
}
|
||||||
|
|
||||||
// Get the JavaScript object, if JSON is used.
|
// Get the JavaScript object, if JSON is used.
|
||||||
if ( type == "json" )
|
if ( type == "json" ) {
|
||||||
data = window["eval"]("(" + data + ")");
|
if ( typeof JSON === "object" && JSON.parse ) {
|
||||||
|
data = JSON.parse( data );
|
||||||
|
} else {
|
||||||
|
data = (new Function("return " + data))();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
@ -693,6 +693,25 @@ test("jQuery.getJSON(String, Function) - JSON object", function() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("jQuery.getJSON - Using Native JSON", function() {
|
||||||
|
expect(2);
|
||||||
|
|
||||||
|
var old = window.JSON;
|
||||||
|
JSON = {
|
||||||
|
parse: function(str){
|
||||||
|
ok( true, "Verifying that parse method was run" );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
stop();
|
||||||
|
jQuery.getJSON(url("data/json.php"), function(json) {
|
||||||
|
window.JSON = old;
|
||||||
|
equals( json, true, "Verifying return value" );
|
||||||
|
start();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
test("jQuery.getJSON(String, Function) - JSON object with absolute url to local content", function() {
|
test("jQuery.getJSON(String, Function) - JSON object with absolute url to local content", function() {
|
||||||
expect(2);
|
expect(2);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user