Makes prefilters and transport inspection more robust and uses better variable names for readability.
This commit is contained in:
parent
02ca45573b
commit
33de9c5597
1 changed files with 22 additions and 18 deletions
40
src/ajax.js
40
src/ajax.js
|
@ -76,38 +76,42 @@ function addToPrefiltersOrTransports( structure ) {
|
||||||
|
|
||||||
//Base inspection function for prefilters and transports
|
//Base inspection function for prefilters and transports
|
||||||
function inspectPrefiltersOrTransports( structure, options, originalOptions,
|
function inspectPrefiltersOrTransports( structure, options, originalOptions,
|
||||||
dataType /* internal */, tested /* internal */ ) {
|
dataType /* internal */, inspected /* internal */ ) {
|
||||||
|
|
||||||
dataType = dataType || options.dataTypes[ 0 ];
|
dataType = dataType || options.dataTypes[ 0 ];
|
||||||
tested = tested || {};
|
inspected = inspected || {};
|
||||||
|
|
||||||
tested[ dataType ] = true;
|
inspected[ dataType ] = true;
|
||||||
|
|
||||||
var list = structure[ dataType ],
|
var list = structure[ dataType ],
|
||||||
i = 0,
|
i = 0,
|
||||||
length = list ? list.length : 0,
|
length = list ? list.length : 0,
|
||||||
executeOnly = structure === prefilters,
|
executeOnly = ( structure === prefilters ),
|
||||||
selected;
|
selection;
|
||||||
|
|
||||||
for(; i < length && !( executeOnly ? typeof selected === "string" && !tested[ selected ] : selected ); i++ ) {
|
for(; i < length && ( executeOnly || !selection ); i++ ) {
|
||||||
selected = list[ i ]( options, originalOptions );
|
selection = list[ i ]( options, originalOptions );
|
||||||
|
// If we got redirected to another dataType
|
||||||
|
// we try there if not done already
|
||||||
|
if ( typeof selection === "string" ) {
|
||||||
|
if ( inspected[ selection ] ) {
|
||||||
|
selection = undefined;
|
||||||
|
} else {
|
||||||
|
options.dataTypes.unshift( selection );
|
||||||
|
selection = inspectPrefiltersOrTransports(
|
||||||
|
structure, options, originalOptions, selection, inspected );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// If we got redirected to another dataType
|
|
||||||
// we try there
|
|
||||||
if ( typeof selected === "string" && !tested[ selected ] ) {
|
|
||||||
options.dataTypes.unshift( selected );
|
|
||||||
selected = inspectPrefiltersOrTransports(
|
|
||||||
structure, options, originalOptions, selected, tested );
|
|
||||||
|
|
||||||
// If we're only executing or nothing was selected
|
// If we're only executing or nothing was selected
|
||||||
// we try the catchall dataType if not done already
|
// we try the catchall dataType if not done already
|
||||||
} else if ( ( executeOnly || !selected ) && !tested[ "*" ] ) {
|
if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
|
||||||
selected = inspectPrefiltersOrTransports(
|
selection = inspectPrefiltersOrTransports(
|
||||||
structure, options, originalOptions, "*" ,tested );
|
structure, options, originalOptions, "*", inspected );
|
||||||
}
|
}
|
||||||
// unnecessary when only executing (prefilters)
|
// unnecessary when only executing (prefilters)
|
||||||
// but it'll be ignored by the caller in that case
|
// but it'll be ignored by the caller in that case
|
||||||
return selected;
|
return selection;
|
||||||
}
|
}
|
||||||
|
|
||||||
jQuery.fn.extend({
|
jQuery.fn.extend({
|
||||||
|
|
Loading…
Reference in a new issue