@@ -95,14 +95,15 @@ function Browser(window, document, body, XHR, $log, $sniffer) {
95
95
* <li><tt>X-Requested-With</tt>: <tt>XMLHttpRequest</tt></li>
96
96
* </ul>
97
97
*
98
+ * @param {number= } timeout Timeout in ms, when the request will be aborted
98
99
* @returns {XMLHttpRequest|undefined } Raw XMLHttpRequest object or undefined when JSONP method
99
100
*
100
101
* @description
101
102
* Send ajax request
102
103
*
103
104
* TODO(vojta): change signature of this method to (method, url, data, headers, callback)
104
105
*/
105
- self . xhr = function ( method , url , post , callback , headers ) {
106
+ self . xhr = function ( method , url , post , callback , headers , timeout ) {
106
107
outstandingRequestCount ++ ;
107
108
if ( lowercase ( method ) == 'jsonp' ) {
108
109
var callbackId = ( "angular_" + Math . random ( ) + '_' + ( idCounter ++ ) ) . replace ( / \d \. / , '' ) ;
@@ -126,21 +127,30 @@ function Browser(window, document, body, XHR, $log, $sniffer) {
126
127
if ( value ) xhr . setRequestHeader ( key , value ) ;
127
128
} ) ;
128
129
130
+ var status ;
129
131
xhr . send ( post || '' ) ;
130
132
131
133
// IE6, IE7 bug - does sync when serving from cache
132
134
if ( xhr . readyState == 4 ) {
133
135
setTimeout ( function ( ) {
134
- completeOutstandingRequest ( callback , fixStatus ( xhr . status ) , xhr . responseText ) ;
136
+ completeOutstandingRequest ( callback , fixStatus ( status || xhr . status ) , xhr . responseText ) ;
135
137
} , 0 ) ;
136
138
} else {
137
139
xhr . onreadystatechange = function ( ) {
138
140
if ( xhr . readyState == 4 ) {
139
- completeOutstandingRequest ( callback , fixStatus ( xhr . status ) , xhr . responseText ) ;
141
+ completeOutstandingRequest ( callback , fixStatus ( status || xhr . status ) ,
142
+ xhr . responseText ) ;
140
143
}
141
144
} ;
142
145
}
143
146
147
+ if ( timeout > 0 ) {
148
+ setTimeout ( function ( ) {
149
+ status = - 1 ;
150
+ xhr . abort ( ) ;
151
+ } , timeout ) ;
152
+ }
153
+
144
154
return xhr ;
145
155
}
146
156
} ;
0 commit comments