Ajax: Support an alternative completeCallback API for transports

Apart from the existing API:

```js
function( status, statusText, responses, headers ) {}
```
a new API is now available:
```js
function( { status, statusText, responses, headers } ) {}
```

This makes it possible to add new parameters in the future without relying on
their order among parameters and being able to provide them selectively.

Ref gh-4405
This commit is contained in:
Michał Gołębiowski-Owczarek 2020-02-28 18:37:42 +01:00 committed by Michał Gołębiowski-Owczarek
parent 3cad5c435a
commit bc5f82ba1d
No known key found for this signature in database
2 changed files with 23 additions and 12 deletions

View File

@ -713,8 +713,19 @@ jQuery.extend( {
// Callback for when everything is done
function done( status, nativeStatusText, responses, headers ) {
var isSuccess, success, error, response, modified,
statusText = nativeStatusText;
var isSuccess, success, error, response, modified, statusText;
if ( typeof status === "object" ) {
// The new, object-based API
nativeStatusText = status.statusText;
responses = status.responses;
headers = status.headers;
status = status.status;
}
statusText = nativeStatusText;
// Ignore repeat invocations
if ( completed ) {

View File

@ -63,23 +63,23 @@ jQuery.ajaxTransport( function( options ) {
if ( type === "abort" ) {
xhr.abort();
} else if ( type === "error" ) {
complete(
complete( {
// File: protocol always yields status 0; see trac-8605, trac-14207
xhr.status,
xhr.statusText
);
status: xhr.status,
statusText: xhr.statusText
} );
} else {
complete(
xhrSuccessStatus[ xhr.status ] || xhr.status,
xhr.statusText,
complete( {
status: xhrSuccessStatus[ xhr.status ] || xhr.status,
statusText: xhr.statusText,
// For XHR2 non-text, let the caller handle it (gh-2498)
( xhr.responseType || "text" ) === "text" ?
responses: ( xhr.responseType || "text" ) === "text" ?
{ text: xhr.responseText } :
{ binary: xhr.response },
xhr.getAllResponseHeaders()
);
headers: xhr.getAllResponseHeaders()
} );
}
}
};