annotate default/node_modules/jquery/src/ajax/xhr.js @ 0:1d038bc9b3d2 default tip

Up:default
author Liny <dev@neowd.com>
date Sat, 31 May 2025 09:21:51 +0800
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
1 define( [
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 "../core",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 "../var/support",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "../ajax"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 ], function( jQuery, support ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 jQuery.ajaxSettings.xhr = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 try {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 return new window.XMLHttpRequest();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 } catch ( e ) {}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 var xhrSuccessStatus = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 // File protocol always yields status code 0, assume 200
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 0: 200,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 // Support: IE <=9 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 // #1450: sometimes IE returns 1223 when it should be 204
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 1223: 204
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 xhrSupported = jQuery.ajaxSettings.xhr();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26 support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 support.ajax = xhrSupported = !!xhrSupported;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 jQuery.ajaxTransport( function( options ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 var callback, errorCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 // Cross domain only allowed if supported through XMLHttpRequest
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 if ( support.cors || xhrSupported && !options.crossDomain ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 return {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 send: function( headers, complete ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 var i,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 xhr = options.xhr();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 xhr.open(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 options.type,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 options.url,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 options.async,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 options.username,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 options.password
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 // Apply custom fields if provided
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 if ( options.xhrFields ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 for ( i in options.xhrFields ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 xhr[ i ] = options.xhrFields[ i ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 // Override mime type if needed
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 if ( options.mimeType && xhr.overrideMimeType ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 xhr.overrideMimeType( options.mimeType );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 // X-Requested-With header
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 // For cross-domain requests, seeing as conditions for a preflight are
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61 // akin to a jigsaw puzzle, we simply never set it to be sure.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 // (it can always be set on a per-request basis or even using ajaxSetup)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 // For same-domain requests, won't change header if already provided.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 headers[ "X-Requested-With" ] = "XMLHttpRequest";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 // Set headers
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 for ( i in headers ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 xhr.setRequestHeader( i, headers[ i ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 // Callback
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74 callback = function( type ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 return function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 if ( callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 callback = errorCallback = xhr.onload =
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 xhr.onerror = xhr.onabort = xhr.ontimeout =
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 xhr.onreadystatechange = null;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 if ( type === "abort" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 xhr.abort();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 } else if ( type === "error" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 // Support: IE <=9 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 // On a manual native abort, IE9 throws
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 // errors on any property access that is not readyState
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 if ( typeof xhr.status !== "number" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 complete( 0, "error" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 complete(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 // File: protocol always yields status 0; see #8605, #14207
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 xhr.status,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 xhr.statusText
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
96 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
97 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
98 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 complete(
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 xhrSuccessStatus[ xhr.status ] || xhr.status,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101 xhr.statusText,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 // Support: IE <=9 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 // IE9 has no XHR2 but throws on binary (trac-11426)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 // For XHR2 non-text, let the caller handle it (gh-2498)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 ( xhr.responseType || "text" ) !== "text" ||
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 typeof xhr.responseText !== "string" ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108 { binary: xhr.response } :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 { text: xhr.responseText },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 xhr.getAllResponseHeaders()
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 // Listen to events
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 xhr.onload = callback();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121 // Support: IE 9 only
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 // Use onreadystatechange to replace onabort
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 // to handle uncaught aborts
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 if ( xhr.onabort !== undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
125 xhr.onabort = errorCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
126 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
127 xhr.onreadystatechange = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
128
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
129 // Check readyState before timeout as it changes
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
130 if ( xhr.readyState === 4 ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
131
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
132 // Allow onerror to be called first,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
133 // but that will not handle a native abort
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
134 // Also, save errorCallback to a variable
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
135 // as xhr.onerror cannot be accessed
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
136 window.setTimeout( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
137 if ( callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
138 errorCallback();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
139 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
140 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
141 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
142 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
143 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
144
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
145 // Create the abort callback
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
146 callback = callback( "abort" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
147
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
148 try {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
149
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
150 // Do send the request (this may raise an exception)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
151 xhr.send( options.hasContent && options.data || null );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
152 } catch ( e ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
153
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
154 // #14683: Only rethrow if this hasn't been notified as an error yet
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
155 if ( callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
156 throw e;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
157 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
158 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
159 },
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
160
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
161 abort: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
162 if ( callback ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
163 callback();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
164 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
165 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
166 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
167 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
168 } );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
169
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
170 } );