mirror of
https://github.com/jquery/jquery.git
synced 2024-11-23 02:54:22 +00:00
Fixes #8115. Renames all references to jXHR with jqXHR in the code (like was done in the doc).
This commit is contained in:
parent
375b787838
commit
cb49b4a1b6
88
src/ajax.js
88
src/ajax.js
@ -73,7 +73,7 @@ function addToPrefiltersOrTransports( structure ) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//Base inspection function for prefilters and transports
|
//Base inspection function for prefilters and transports
|
||||||
function inspectPrefiltersOrTransports( structure, options, originalOptions, jXHR,
|
function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
|
||||||
dataType /* internal */, inspected /* internal */ ) {
|
dataType /* internal */, inspected /* internal */ ) {
|
||||||
|
|
||||||
dataType = dataType || options.dataTypes[ 0 ];
|
dataType = dataType || options.dataTypes[ 0 ];
|
||||||
@ -88,7 +88,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jXH
|
|||||||
selection;
|
selection;
|
||||||
|
|
||||||
for(; i < length && ( executeOnly || !selection ); i++ ) {
|
for(; i < length && ( executeOnly || !selection ); i++ ) {
|
||||||
selection = list[ i ]( options, originalOptions, jXHR );
|
selection = list[ i ]( options, originalOptions, jqXHR );
|
||||||
// If we got redirected to another dataType
|
// If we got redirected to another dataType
|
||||||
// we try there if not done already
|
// we try there if not done already
|
||||||
if ( typeof selection === "string" ) {
|
if ( typeof selection === "string" ) {
|
||||||
@ -97,7 +97,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jXH
|
|||||||
} else {
|
} else {
|
||||||
options.dataTypes.unshift( selection );
|
options.dataTypes.unshift( selection );
|
||||||
selection = inspectPrefiltersOrTransports(
|
selection = inspectPrefiltersOrTransports(
|
||||||
structure, options, originalOptions, jXHR, selection, inspected );
|
structure, options, originalOptions, jqXHR, selection, inspected );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jXH
|
|||||||
// we try the catchall dataType if not done already
|
// we try the catchall dataType if not done already
|
||||||
if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
|
if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
|
||||||
selection = inspectPrefiltersOrTransports(
|
selection = inspectPrefiltersOrTransports(
|
||||||
structure, options, originalOptions, jXHR, "*", inspected );
|
structure, options, originalOptions, jqXHR, "*", 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
|
||||||
@ -155,14 +155,14 @@ jQuery.fn.extend({
|
|||||||
dataType: "html",
|
dataType: "html",
|
||||||
data: params,
|
data: params,
|
||||||
// Complete callback (responseText is used internally)
|
// Complete callback (responseText is used internally)
|
||||||
complete: function( jXHR, status, responseText ) {
|
complete: function( jqXHR, status, responseText ) {
|
||||||
// Store the response as specified by the jXHR object
|
// Store the response as specified by the jqXHR object
|
||||||
responseText = jXHR.responseText;
|
responseText = jqXHR.responseText;
|
||||||
// If successful, inject the HTML into all the matched elements
|
// If successful, inject the HTML into all the matched elements
|
||||||
if ( jXHR.isResolved() ) {
|
if ( jqXHR.isResolved() ) {
|
||||||
// #4825: Get the actual response in case
|
// #4825: Get the actual response in case
|
||||||
// a dataFilter is present in ajaxSettings
|
// a dataFilter is present in ajaxSettings
|
||||||
jXHR.done(function( r ) {
|
jqXHR.done(function( r ) {
|
||||||
responseText = r;
|
responseText = r;
|
||||||
});
|
});
|
||||||
// See if a selector was specified
|
// See if a selector was specified
|
||||||
@ -181,7 +181,7 @@ jQuery.fn.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ( callback ) {
|
if ( callback ) {
|
||||||
self.each( callback, [ responseText, status, jXHR ] );
|
self.each( callback, [ responseText, status, jqXHR ] );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -364,12 +364,12 @@ jQuery.extend({
|
|||||||
loc = document.location,
|
loc = document.location,
|
||||||
protocol = loc.protocol || "http:",
|
protocol = loc.protocol || "http:",
|
||||||
parts,
|
parts,
|
||||||
// The jXHR state
|
// The jqXHR state
|
||||||
state = 0,
|
state = 0,
|
||||||
// Loop variable
|
// Loop variable
|
||||||
i,
|
i,
|
||||||
// Fake xhr
|
// Fake xhr
|
||||||
jXHR = {
|
jqXHR = {
|
||||||
|
|
||||||
readyState: 0,
|
readyState: 0,
|
||||||
|
|
||||||
@ -431,19 +431,19 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Dereference transport for early garbage collection
|
// Dereference transport for early garbage collection
|
||||||
// (no matter how long the jXHR object will be used)
|
// (no matter how long the jqXHR object will be used)
|
||||||
transport = undefined;
|
transport = undefined;
|
||||||
|
|
||||||
// Cache response headers
|
// Cache response headers
|
||||||
responseHeadersString = headers || "";
|
responseHeadersString = headers || "";
|
||||||
|
|
||||||
// Set readyState
|
// Set readyState
|
||||||
jXHR.readyState = status ? 4 : 0;
|
jqXHR.readyState = status ? 4 : 0;
|
||||||
|
|
||||||
var isSuccess,
|
var isSuccess,
|
||||||
success,
|
success,
|
||||||
error,
|
error,
|
||||||
response = responses ? ajaxHandleResponses( s, jXHR, responses ) : undefined,
|
response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
|
||||||
lastModified,
|
lastModified,
|
||||||
etag;
|
etag;
|
||||||
|
|
||||||
@ -453,10 +453,10 @@ jQuery.extend({
|
|||||||
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
|
||||||
if ( s.ifModified ) {
|
if ( s.ifModified ) {
|
||||||
|
|
||||||
if ( ( lastModified = jXHR.getResponseHeader( "Last-Modified" ) ) ) {
|
if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
|
||||||
jQuery.lastModified[ ifModifiedKey ] = lastModified;
|
jQuery.lastModified[ ifModifiedKey ] = lastModified;
|
||||||
}
|
}
|
||||||
if ( ( etag = jXHR.getResponseHeader( "Etag" ) ) ) {
|
if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
|
||||||
jQuery.etag[ ifModifiedKey ] = etag;
|
jQuery.etag[ ifModifiedKey ] = etag;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -493,30 +493,30 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Set data for the fake xhr object
|
// Set data for the fake xhr object
|
||||||
jXHR.status = status;
|
jqXHR.status = status;
|
||||||
jXHR.statusText = statusText;
|
jqXHR.statusText = statusText;
|
||||||
|
|
||||||
// Success/Error
|
// Success/Error
|
||||||
if ( isSuccess ) {
|
if ( isSuccess ) {
|
||||||
deferred.resolveWith( callbackContext, [ success, statusText, jXHR ] );
|
deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
|
||||||
} else {
|
} else {
|
||||||
deferred.rejectWith( callbackContext, [ jXHR, statusText, error ] );
|
deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status-dependent callbacks
|
// Status-dependent callbacks
|
||||||
jXHR.statusCode( statusCode );
|
jqXHR.statusCode( statusCode );
|
||||||
statusCode = undefined;
|
statusCode = undefined;
|
||||||
|
|
||||||
if ( s.global ) {
|
if ( s.global ) {
|
||||||
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
|
globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
|
||||||
[ jXHR, s, isSuccess ? success : error ] );
|
[ jqXHR, s, isSuccess ? success : error ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Complete
|
// Complete
|
||||||
completeDeferred.resolveWith( callbackContext, [ jXHR, statusText ] );
|
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
|
||||||
|
|
||||||
if ( s.global ) {
|
if ( s.global ) {
|
||||||
globalEventContext.trigger( "ajaxComplete", [ jXHR, s] );
|
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
|
||||||
// Handle the global AJAX counter
|
// Handle the global AJAX counter
|
||||||
if ( !( --jQuery.active ) ) {
|
if ( !( --jQuery.active ) ) {
|
||||||
jQuery.event.trigger( "ajaxStop" );
|
jQuery.event.trigger( "ajaxStop" );
|
||||||
@ -525,13 +525,13 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attach deferreds
|
// Attach deferreds
|
||||||
deferred.promise( jXHR );
|
deferred.promise( jqXHR );
|
||||||
jXHR.success = jXHR.done;
|
jqXHR.success = jqXHR.done;
|
||||||
jXHR.error = jXHR.fail;
|
jqXHR.error = jqXHR.fail;
|
||||||
jXHR.complete = completeDeferred.done;
|
jqXHR.complete = completeDeferred.done;
|
||||||
|
|
||||||
// Status-dependent callbacks
|
// Status-dependent callbacks
|
||||||
jXHR.statusCode = function( map ) {
|
jqXHR.statusCode = function( map ) {
|
||||||
if ( map ) {
|
if ( map ) {
|
||||||
var tmp;
|
var tmp;
|
||||||
if ( state < 2 ) {
|
if ( state < 2 ) {
|
||||||
@ -539,8 +539,8 @@ jQuery.extend({
|
|||||||
statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
|
statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
tmp = map[ jXHR.status ];
|
tmp = map[ jqXHR.status ];
|
||||||
jXHR.then( tmp, tmp );
|
jqXHR.then( tmp, tmp );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
@ -570,7 +570,7 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Apply prefilters
|
// Apply prefilters
|
||||||
inspectPrefiltersOrTransports( prefilters, s, options, jXHR );
|
inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
|
||||||
|
|
||||||
// Uppercase the type
|
// Uppercase the type
|
||||||
s.type = s.type.toUpperCase();
|
s.type = s.type.toUpperCase();
|
||||||
@ -633,36 +633,36 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Allow custom headers/mimetypes and early abort
|
// Allow custom headers/mimetypes and early abort
|
||||||
if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jXHR, s ) === false || state === 2 ) ) {
|
if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
|
||||||
// Abort if not done already
|
// Abort if not done already
|
||||||
done( 0, "abort" );
|
done( 0, "abort" );
|
||||||
// Return false
|
// Return false
|
||||||
jXHR = false;
|
jqXHR = false;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
// Install callbacks on deferreds
|
// Install callbacks on deferreds
|
||||||
for ( i in { success: 1, error: 1, complete: 1 } ) {
|
for ( i in { success: 1, error: 1, complete: 1 } ) {
|
||||||
jXHR[ i ]( s[ i ] );
|
jqXHR[ i ]( s[ i ] );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get transport
|
// Get transport
|
||||||
transport = inspectPrefiltersOrTransports( transports, s, options, jXHR );
|
transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
|
||||||
|
|
||||||
// If no transport, we auto-abort
|
// If no transport, we auto-abort
|
||||||
if ( !transport ) {
|
if ( !transport ) {
|
||||||
done( -1, "No Transport" );
|
done( -1, "No Transport" );
|
||||||
} else {
|
} else {
|
||||||
// Set state as sending
|
// Set state as sending
|
||||||
state = jXHR.readyState = 1;
|
state = jqXHR.readyState = 1;
|
||||||
// Send global event
|
// Send global event
|
||||||
if ( s.global ) {
|
if ( s.global ) {
|
||||||
globalEventContext.trigger( "ajaxSend", [ jXHR, s ] );
|
globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
|
||||||
}
|
}
|
||||||
// Timeout
|
// Timeout
|
||||||
if ( s.async && s.timeout > 0 ) {
|
if ( s.async && s.timeout > 0 ) {
|
||||||
timeoutTimer = setTimeout( function(){
|
timeoutTimer = setTimeout( function(){
|
||||||
jXHR.abort( "timeout" );
|
jqXHR.abort( "timeout" );
|
||||||
}, s.timeout );
|
}, s.timeout );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -679,7 +679,7 @@ jQuery.extend({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return jXHR;
|
return jqXHR;
|
||||||
},
|
},
|
||||||
|
|
||||||
// Serialize an array of form elements or a set of
|
// Serialize an array of form elements or a set of
|
||||||
@ -774,7 +774,7 @@ jQuery.extend({
|
|||||||
* - finds the right dataType (mediates between content-type and expected dataType)
|
* - finds the right dataType (mediates between content-type and expected dataType)
|
||||||
* - returns the corresponding response
|
* - returns the corresponding response
|
||||||
*/
|
*/
|
||||||
function ajaxHandleResponses( s, jXHR, responses ) {
|
function ajaxHandleResponses( s, jqXHR, responses ) {
|
||||||
|
|
||||||
var contents = s.contents,
|
var contents = s.contents,
|
||||||
dataTypes = s.dataTypes,
|
dataTypes = s.dataTypes,
|
||||||
@ -787,7 +787,7 @@ function ajaxHandleResponses( s, jXHR, responses ) {
|
|||||||
// Fill responseXXX fields
|
// Fill responseXXX fields
|
||||||
for( type in responseFields ) {
|
for( type in responseFields ) {
|
||||||
if ( type in responses ) {
|
if ( type in responses ) {
|
||||||
jXHR[ responseFields[type] ] = responses[ type ];
|
jqXHR[ responseFields[type] ] = responses[ type ];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,7 +795,7 @@ function ajaxHandleResponses( s, jXHR, responses ) {
|
|||||||
while( dataTypes[ 0 ] === "*" ) {
|
while( dataTypes[ 0 ] === "*" ) {
|
||||||
dataTypes.shift();
|
dataTypes.shift();
|
||||||
if ( ct === undefined ) {
|
if ( ct === undefined ) {
|
||||||
ct = jXHR.getResponseHeader( "content-type" );
|
ct = jqXHR.getResponseHeader( "content-type" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ jQuery.ajaxSetup({
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Detect, normalize options and install callbacks for jsonp requests
|
// Detect, normalize options and install callbacks for jsonp requests
|
||||||
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jXHR ) {
|
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
|
||||||
|
|
||||||
var dataIsString = ( typeof s.data === "string" );
|
var dataIsString = ( typeof s.data === "string" );
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jXHR ) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Install cleanUp function
|
// Install cleanUp function
|
||||||
jXHR.then( cleanUp, cleanUp );
|
jqXHR.then( cleanUp, cleanUp );
|
||||||
|
|
||||||
// Use data converter to retrieve json after script execution
|
// Use data converter to retrieve json after script execution
|
||||||
s.converters["script json"] = function() {
|
s.converters["script json"] = function() {
|
||||||
|
@ -311,7 +311,7 @@ test("jQuery.ajax() - responseText on error", function() {
|
|||||||
jQuery.ajax({
|
jQuery.ajax({
|
||||||
url: url("data/errorWithText.php"),
|
url: url("data/errorWithText.php"),
|
||||||
error: function(xhr) {
|
error: function(xhr) {
|
||||||
strictEqual( xhr.responseText , "plain text message" , "Test jXHR.responseText is filled for HTTP errors" );
|
strictEqual( xhr.responseText , "plain text message" , "Test jqXHR.responseText is filled for HTTP errors" );
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function() {
|
||||||
start();
|
start();
|
||||||
@ -1218,9 +1218,9 @@ test("jQuery.get(String, Hash, Function) - parse xml and use text() on nodes", f
|
|||||||
test("jQuery.getScript(String, Function) - with callback", function() {
|
test("jQuery.getScript(String, Function) - with callback", function() {
|
||||||
expect(3);
|
expect(3);
|
||||||
stop();
|
stop();
|
||||||
jQuery.getScript(url("data/test.js"), function( data, _, jXHR ) {
|
jQuery.getScript(url("data/test.js"), function( data, _, jqXHR ) {
|
||||||
equals( foobar, "bar", 'Check if script was evaluated' );
|
equals( foobar, "bar", 'Check if script was evaluated' );
|
||||||
strictEqual( data, jXHR.responseText, "Same-domain script requests returns the source of the script (#8082)" );
|
strictEqual( data, jqXHR.responseText, "Same-domain script requests returns the source of the script (#8082)" );
|
||||||
setTimeout(start, 100);
|
setTimeout(start, 100);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -1394,8 +1394,8 @@ jQuery.each( [ "Same Domain", "Cross Domain" ] , function( crossDomain , label )
|
|||||||
dataType: "jsonp",
|
dataType: "jsonp",
|
||||||
crossDomain: crossDomain,
|
crossDomain: crossDomain,
|
||||||
jsonpCallback: "functionToCleanUp",
|
jsonpCallback: "functionToCleanUp",
|
||||||
beforeSend: function( jXHR ) {
|
beforeSend: function( jqXHR ) {
|
||||||
xhr = jXHR;
|
xhr = jqXHR;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -2072,16 +2072,16 @@ test( "jQuery.ajax - statusCode" , function() {
|
|||||||
}).statusCode( createStatusCodes( "immediately with method" , isSuccess ) );
|
}).statusCode( createStatusCodes( "immediately with method" , isSuccess ) );
|
||||||
|
|
||||||
jQuery.ajax( url( uri ) , {
|
jQuery.ajax( url( uri ) , {
|
||||||
complete: function(jXHR) {
|
complete: function(jqXHR) {
|
||||||
jXHR.statusCode( createStatusCodes( "on complete" , isSuccess ) );
|
jqXHR.statusCode( createStatusCodes( "on complete" , isSuccess ) );
|
||||||
countComplete();
|
countComplete();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
jQuery.ajax( url( uri ) , {
|
jQuery.ajax( url( uri ) , {
|
||||||
complete: function(jXHR) {
|
complete: function(jqXHR) {
|
||||||
setTimeout( function() {
|
setTimeout( function() {
|
||||||
jXHR.statusCode( createStatusCodes( "very late binding" , isSuccess ) );
|
jqXHR.statusCode( createStatusCodes( "very late binding" , isSuccess ) );
|
||||||
countComplete();
|
countComplete();
|
||||||
} , 100 );
|
} , 100 );
|
||||||
}
|
}
|
||||||
@ -2089,10 +2089,10 @@ test( "jQuery.ajax - statusCode" , function() {
|
|||||||
|
|
||||||
jQuery.ajax( url( uri ) , {
|
jQuery.ajax( url( uri ) , {
|
||||||
statusCode: createStatusCodes( "all (options)" , isSuccess ),
|
statusCode: createStatusCodes( "all (options)" , isSuccess ),
|
||||||
complete: function(jXHR) {
|
complete: function(jqXHR) {
|
||||||
jXHR.statusCode( createStatusCodes( "all (on complete)" , isSuccess ) );
|
jqXHR.statusCode( createStatusCodes( "all (on complete)" , isSuccess ) );
|
||||||
setTimeout( function() {
|
setTimeout( function() {
|
||||||
jXHR.statusCode( createStatusCodes( "all (very late binding)" , isSuccess ) );
|
jqXHR.statusCode( createStatusCodes( "all (very late binding)" , isSuccess ) );
|
||||||
countComplete();
|
countComplete();
|
||||||
} , 100 );
|
} , 100 );
|
||||||
}
|
}
|
||||||
@ -2101,22 +2101,22 @@ test( "jQuery.ajax - statusCode" , function() {
|
|||||||
var testString = "";
|
var testString = "";
|
||||||
|
|
||||||
jQuery.ajax( url( uri ), {
|
jQuery.ajax( url( uri ), {
|
||||||
success: function( a , b , jXHR ) {
|
success: function( a , b , jqXHR ) {
|
||||||
ok( isSuccess , "success" );
|
ok( isSuccess , "success" );
|
||||||
var statusCode = {};
|
var statusCode = {};
|
||||||
statusCode[ jXHR.status ] = function() {
|
statusCode[ jqXHR.status ] = function() {
|
||||||
testString += "B";
|
testString += "B";
|
||||||
};
|
};
|
||||||
jXHR.statusCode( statusCode );
|
jqXHR.statusCode( statusCode );
|
||||||
testString += "A";
|
testString += "A";
|
||||||
},
|
},
|
||||||
error: function( jXHR ) {
|
error: function( jqXHR ) {
|
||||||
ok( ! isSuccess , "error" );
|
ok( ! isSuccess , "error" );
|
||||||
var statusCode = {};
|
var statusCode = {};
|
||||||
statusCode[ jXHR.status ] = function() {
|
statusCode[ jqXHR.status ] = function() {
|
||||||
testString += "B";
|
testString += "B";
|
||||||
};
|
};
|
||||||
jXHR.statusCode( statusCode );
|
jqXHR.statusCode( statusCode );
|
||||||
testString += "A";
|
testString += "A";
|
||||||
},
|
},
|
||||||
complete: function() {
|
complete: function() {
|
||||||
|
Loading…
Reference in New Issue
Block a user