Blame view

app/bower_components/jquery/src/ajax/xhr.js 4.2 KB
87c93a029   Dang YoungWorld   add modal
1
  define( [
f986e111b   TRUONG   add libs
2
3
4
5
  	"../core",
  	"../var/support",
  	"../ajax"
  ], function( jQuery, support ) {
87c93a029   Dang YoungWorld   add modal
6
  "use strict";
f986e111b   TRUONG   add libs
7

87c93a029   Dang YoungWorld   add modal
8
9
10
11
12
  jQuery.ajaxSettings.xhr = function() {
  	try {
  		return new window.XMLHttpRequest();
  	} catch ( e ) {}
  };
f986e111b   TRUONG   add libs
13

87c93a029   Dang YoungWorld   add modal
14
  var xhrSuccessStatus = {
f986e111b   TRUONG   add libs
15

87c93a029   Dang YoungWorld   add modal
16
17
  		// File protocol always yields status code 0, assume 200
  		0: 200,
f986e111b   TRUONG   add libs
18

87c93a029   Dang YoungWorld   add modal
19
20
21
22
23
  		// Support: IE <=9 only
  		// #1450: sometimes IE returns 1223 when it should be 204
  		1223: 204
  	},
  	xhrSupported = jQuery.ajaxSettings.xhr();
f986e111b   TRUONG   add libs
24

87c93a029   Dang YoungWorld   add modal
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
  support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
  support.ajax = xhrSupported = !!xhrSupported;
  
  jQuery.ajaxTransport( function( options ) {
  	var callback, errorCallback;
  
  	// Cross domain only allowed if supported through XMLHttpRequest
  	if ( support.cors || xhrSupported && !options.crossDomain ) {
  		return {
  			send: function( headers, complete ) {
  				var i,
  					xhr = options.xhr();
  
  				xhr.open(
  					options.type,
  					options.url,
  					options.async,
  					options.username,
  					options.password
  				);
  
  				// Apply custom fields if provided
  				if ( options.xhrFields ) {
  					for ( i in options.xhrFields ) {
  						xhr[ i ] = options.xhrFields[ i ];
f986e111b   TRUONG   add libs
50
  					}
87c93a029   Dang YoungWorld   add modal
51
  				}
f986e111b   TRUONG   add libs
52

87c93a029   Dang YoungWorld   add modal
53
54
55
56
  				// Override mime type if needed
  				if ( options.mimeType && xhr.overrideMimeType ) {
  					xhr.overrideMimeType( options.mimeType );
  				}
f986e111b   TRUONG   add libs
57

87c93a029   Dang YoungWorld   add modal
58
59
60
61
62
63
64
65
  				// X-Requested-With header
  				// For cross-domain requests, seeing as conditions for a preflight are
  				// akin to a jigsaw puzzle, we simply never set it to be sure.
  				// (it can always be set on a per-request basis or even using ajaxSetup)
  				// For same-domain requests, won't change header if already provided.
  				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
  					headers[ "X-Requested-With" ] = "XMLHttpRequest";
  				}
f986e111b   TRUONG   add libs
66

87c93a029   Dang YoungWorld   add modal
67
68
69
70
  				// Set headers
  				for ( i in headers ) {
  					xhr.setRequestHeader( i, headers[ i ] );
  				}
f986e111b   TRUONG   add libs
71

87c93a029   Dang YoungWorld   add modal
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
  				// Callback
  				callback = function( type ) {
  					return function() {
  						if ( callback ) {
  							callback = errorCallback = xhr.onload =
  								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
  
  							if ( type === "abort" ) {
  								xhr.abort();
  							} else if ( type === "error" ) {
  
  								// Support: IE <=9 only
  								// On a manual native abort, IE9 throws
  								// errors on any property access that is not readyState
  								if ( typeof xhr.status !== "number" ) {
  									complete( 0, "error" );
  								} else {
  									complete(
  
  										// File: protocol always yields status 0; see #8605, #14207
  										xhr.status,
  										xhr.statusText
  									);
f986e111b   TRUONG   add libs
95
96
  								}
  							} else {
87c93a029   Dang YoungWorld   add modal
97
98
99
100
101
102
103
104
105
106
107
108
109
  								complete(
  									xhrSuccessStatus[ xhr.status ] || xhr.status,
  									xhr.statusText,
  
  									// Support: IE <=9 only
  									// IE9 has no XHR2 but throws on binary (trac-11426)
  									// For XHR2 non-text, let the caller handle it (gh-2498)
  									( xhr.responseType || "text" ) !== "text"  ||
  									typeof xhr.responseText !== "string" ?
  										{ binary: xhr.response } :
  										{ text: xhr.responseText },
  									xhr.getAllResponseHeaders()
  								);
f986e111b   TRUONG   add libs
110
111
  							}
  						}
87c93a029   Dang YoungWorld   add modal
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
  					};
  				};
  
  				// Listen to events
  				xhr.onload = callback();
  				errorCallback = xhr.onerror = callback( "error" );
  
  				// Support: IE 9 only
  				// Use onreadystatechange to replace onabort
  				// to handle uncaught aborts
  				if ( xhr.onabort !== undefined ) {
  					xhr.onabort = errorCallback;
  				} else {
  					xhr.onreadystatechange = function() {
  
  						// Check readyState before timeout as it changes
  						if ( xhr.readyState === 4 ) {
  
  							// Allow onerror to be called first,
  							// but that will not handle a native abort
  							// Also, save errorCallback to a variable
  							// as xhr.onerror cannot be accessed
  							window.setTimeout( function() {
  								if ( callback ) {
  									errorCallback();
  								}
  							} );
f986e111b   TRUONG   add libs
139
140
  						}
  					};
87c93a029   Dang YoungWorld   add modal
141
  				}
f986e111b   TRUONG   add libs
142

87c93a029   Dang YoungWorld   add modal
143
144
145
146
  				// Create the abort callback
  				callback = callback( "abort" );
  
  				try {
f986e111b   TRUONG   add libs
147

87c93a029   Dang YoungWorld   add modal
148
149
150
151
152
  					// Do send the request (this may raise an exception)
  					xhr.send( options.hasContent && options.data || null );
  				} catch ( e ) {
  
  					// #14683: Only rethrow if this hasn't been notified as an error yet
f986e111b   TRUONG   add libs
153
  					if ( callback ) {
87c93a029   Dang YoungWorld   add modal
154
  						throw e;
f986e111b   TRUONG   add libs
155
156
  					}
  				}
87c93a029   Dang YoungWorld   add modal
157
  			},
f986e111b   TRUONG   add libs
158

87c93a029   Dang YoungWorld   add modal
159
160
161
162
163
164
165
166
  			abort: function() {
  				if ( callback ) {
  					callback();
  				}
  			}
  		};
  	}
  } );
f986e111b   TRUONG   add libs
167

87c93a029   Dang YoungWorld   add modal
168
  } );