Changed dataConverters key format.

This commit is contained in:
unknown 2010-12-24 18:02:45 +01:00
parent 11642ba20c
commit d303687815
5 changed files with 19 additions and 30 deletions

View file

@ -238,36 +238,21 @@ jQuery.extend({
},
// List of data converters
// 1) key format is "source_type => destination_type" (spaces required)
// 1) key format is "source_type destination_type" (a single space in-between)
// 2) the catchall symbol "*" can be used for source_type
dataConverters: {
// Convert anything to text
"* => text": function(data) {
return "" + data;
},
"* text": window.String,
// Text to html (no transformation)
"text => html": function(data) {
return data;
},
"text html": window.String,
// Evaluate text as a json expression
"text => json": jQuery.parseJSON,
"text json": jQuery.parseJSON,
// Parse text as xml
"text => xml": function(data) {
var xml, parser;
if ( window.DOMParser ) { // Standard
parser = new DOMParser();
xml = parser.parseFromString(data,"text/xml");
} else { // IE
xml = new ActiveXObject("Microsoft.XMLDOM");
xml.async="false";
xml.loadXML(data);
}
return xml;
}
"text xml": jQuery.parseXML
}
},

View file

@ -70,18 +70,16 @@ jQuery.xhr.prefilter("json jsonp", function(s) {
}, s.complete ];
// Use data converter to retrieve json after script execution
s.dataConverters["script => json"] = function() {
s.dataConverters["script json"] = function() {
if ( ! responseContainer ) {
jQuery.error("Callback '" + jsonpCallback + "' was not called");
jQuery.error( jsonpCallback + " was not called" );
}
return responseContainer[ 0 ];
};
// Delegate to script transport
return "script";
}
});
})( jQuery );

View file

@ -12,7 +12,7 @@ jQuery.extend( true, jQuery.ajaxSettings , {
},
dataConverters: {
"text => script": jQuery.globalEval
"text script": jQuery.globalEval
}
} );

View file

@ -254,12 +254,14 @@ jQuery.xhr = function( _native ) {
} else if ( current !== "*" && prev !== current ) {
oneConv = conv1 =
dataConverters[ ( conversion = prev + " => " + current ) ] ||
dataConverters[ "* => " + current ];
dataConverters[ ( conversion = prev + " " + current ) ] ||
dataConverters[ "* " + current ];
console.log( conversion );
if ( ! oneConv && prev !== "text" && current !== "text" ) {
conv1 = dataConverters[ prev + " => text" ] || dataConverters[ "* => text" ];
conv2 = dataConverters[ "text => " + current ];
conv1 = dataConverters[ prev + " text" ] || dataConverters[ "* text" ];
conv2 = dataConverters[ "text " + current ];
}
if ( oneConv || conv1 && conv2 ) {
response = oneConv ? conv1( response ) : conv2( conv1( response ) );

View file

@ -707,6 +707,10 @@ test("jQuery.ajax - xml: non-namespace elements inside namespaced elements (over
equals( jQuery("jsconf", resp).length, 1, 'jsconf in responseXML' );
equals( jQuery("thing", resp).length, 2, 'things in responseXML' );
start();
},
error: function(_1,_2,error) {
ok( false, error );
start();
}
});
});
@ -1487,7 +1491,7 @@ test("jQuery.ajax() - json by content-type disabled with options", function() {
},
success: function( text ) {
equals( typeof text , "string" , "json wasn't auto-determined" );
var json = this.dataConverters["text => json"]( text );
var json = this.dataConverters["text json"]( text );
ok( json.length >= 2, "Check length");
equals( json[0].name, 'John', 'Check JSON: first, name' );
equals( json[0].age, 21, 'Check JSON: first, age' );