1
- // jQuery.XDomainRequest.js
2
- // Author: Jason Moon - @JSONMOON
3
- // IE8+
4
- ( function ( factory ) {
5
- if ( typeof define === 'function' && define . amd ) {
6
- // AMD. Register as anonymous module.
7
- define ( [ 'jquery' ] , factory ) ;
8
- } else {
9
- // Browser globals.
10
- factory ( jQuery ) ;
11
- }
12
- } ( function ( $ ) {
1
+ /*!
2
+ * jQuery-ajaxTransport-XDomainRequest - v1.0.2 - 2014-05-02
3
+ * https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest
4
+ * Copyright (c) 2014 Jason Moon (@JSONMOON)
5
+ * Licensed MIT (/blob/master/LICENSE.txt)
6
+ */
7
+ ( function ( factory ) {
8
+ if ( typeof define === 'function' && define . amd ) {
9
+ // AMD. Register as anonymous module.
10
+ define ( [ 'jquery' ] , factory ) ;
11
+ } else {
12
+ // Browser globals.
13
+ factory ( jQuery ) ;
14
+ }
15
+ } ( function ( $ ) {
16
+
17
+ // Only continue if we're on IE8/IE9 with jQuery 1.5+ (contains the ajaxTransport function)
18
+ if ( $ . support . cors || ! $ . ajaxTransport || ! window . XDomainRequest ) {
19
+ return ;
20
+ }
13
21
14
- if ( ! $ . support . cors && $ . ajaxTransport && window . XDomainRequest ) {
15
- var httpRegEx = / ^ h t t p s ? : \/ \/ / i;
16
- var getOrPostRegEx = / ^ g e t | p o s t $ / i;
17
- var sameSchemeRegEx = new RegExp ( '^' + location . protocol , 'i' ) ;
18
- var htmlRegEx = / t e x t \/ h t m l / i;
19
- var jsonRegEx = / \/ j s o n / i;
20
- var xmlRegEx = / \/ x m l / i;
22
+ var httpRegEx = / ^ h t t p s ? : \/ \/ / i;
23
+ var getOrPostRegEx = / ^ g e t | p o s t $ / i;
24
+ var sameSchemeRegEx = new RegExp ( '^' + location . protocol , 'i' ) ;
25
+
26
+ // ajaxTransport exists in jQuery 1.5+
27
+ $ . ajaxTransport ( '* text html xml json' , function ( options , userOptions , jqXHR ) {
21
28
22
- // ajaxTransport exists in jQuery 1.5+
23
- $ . ajaxTransport ( '* text html xml json' , function ( options , userOptions , jqXHR ) {
24
- // XDomainRequests must be: asynchronous, GET or POST methods, HTTP or HTTPS protocol, and same scheme as calling page
25
- if ( options . crossDomain && options . async && getOrPostRegEx . test ( options . type ) && httpRegEx . test ( options . url ) && sameSchemeRegEx . test ( options . url ) ) {
26
- var xdr = null ;
27
- var userType = ( userOptions . dataType || '' ) . toLowerCase ( ) ;
28
- return {
29
- send : function ( headers , complete ) {
30
- xdr = new XDomainRequest ( ) ;
31
- if ( / ^ \d + $ / . test ( userOptions . timeout ) ) {
32
- xdr . timeout = userOptions . timeout ;
33
- }
34
- xdr . ontimeout = function ( ) {
35
- complete ( 500 , 'timeout' ) ;
36
- } ;
37
- xdr . onload = function ( ) {
38
- var allResponseHeaders = 'Content-Length: ' + xdr . responseText . length + '\r\nContent-Type: ' + xdr . contentType ;
39
- var status = {
40
- code : 200 ,
41
- message : 'success'
42
- } ;
43
- var responses = {
44
- text : xdr . responseText
45
- } ;
29
+ // Only continue if the request is: asynchronous, uses GET or POST method, has HTTP or HTTPS protocol, and has the same scheme as the calling page
30
+ if ( ! options . crossDomain || ! options . async || ! getOrPostRegEx . test ( options . type ) || ! httpRegEx . test ( options . url ) || ! sameSchemeRegEx . test ( options . url ) ) {
31
+ return ;
32
+ }
33
+
34
+ var xdr = null ;
35
+
36
+ return {
37
+ send : function ( headers , complete ) {
38
+ var postData = '' ;
39
+ var userType = ( userOptions . dataType || '' ) . toLowerCase ( ) ;
40
+
41
+ xdr = new XDomainRequest ( ) ;
42
+ if ( / ^ \d + $ / . test ( userOptions . timeout ) ) {
43
+ xdr . timeout = userOptions . timeout ;
44
+ }
45
+
46
+ xdr . ontimeout = function ( ) {
47
+ complete ( 500 , 'timeout' ) ;
48
+ } ;
49
+
50
+ xdr . onload = function ( ) {
51
+ var allResponseHeaders = 'Content-Length: ' + xdr . responseText . length + '\r\nContent-Type: ' + xdr . contentType ;
52
+ var status = {
53
+ code : 200 ,
54
+ message : 'success'
55
+ } ;
56
+ var responses = {
57
+ text : xdr . responseText
58
+ } ;
59
+ try {
60
+ if ( userType === 'html' || / t e x t \/ h t m l / i. test ( xdr . contentType ) ) {
61
+ responses . html = xdr . responseText ;
62
+ } else if ( userType === 'json' || ( userType !== 'text' && / \/ j s o n / i. test ( xdr . contentType ) ) ) {
46
63
try {
47
- if ( userType === 'html' || htmlRegEx . test ( xdr . contentType ) ) {
48
- responses . html = xdr . responseText ;
49
- } else if ( userType === 'json' || ( userType !== 'text' && jsonRegEx . test ( xdr . contentType ) ) ) {
50
- try {
51
- responses . json = $ . parseJSON ( xdr . responseText ) ;
52
- } catch ( e ) {
53
- status . code = 500 ;
54
- status . message = 'parseerror' ;
55
- //throw 'Invalid JSON: ' + xdr.responseText;
56
- }
57
- } else if ( userType === 'xml' || ( userType !== 'text' && xmlRegEx . test ( xdr . contentType ) ) ) {
58
- var doc = new ActiveXObject ( 'Microsoft.XMLDOM' ) ;
59
- doc . async = false ;
60
- try {
61
- doc . loadXML ( xdr . responseText ) ;
62
- } catch ( e ) {
63
- doc = undefined ;
64
- }
65
- if ( ! doc || ! doc . documentElement || doc . getElementsByTagName ( 'parsererror' ) . length ) {
66
- status . code = 500 ;
67
- status . message = 'parseerror' ;
68
- throw 'Invalid XML: ' + xdr . responseText ;
69
- }
70
- responses . xml = doc ;
71
- }
72
- } catch ( parseMessage ) {
73
- throw parseMessage ;
74
- } finally {
75
- complete ( status . code , status . message , responses , allResponseHeaders ) ;
64
+ responses . json = $ . parseJSON ( xdr . responseText ) ;
65
+ } catch ( e ) {
66
+ status . code = 500 ;
67
+ status . message = 'parseerror' ;
68
+ //throw 'Invalid JSON: ' + xdr.responseText;
76
69
}
77
- } ;
78
- // set an empty handler for 'onprogress' so requests don't get aborted
79
- xdr . onprogress = function ( ) { } ;
80
- xdr . onerror = function ( ) {
81
- complete ( 500 , 'error' , {
82
- text : xdr . responseText
83
- } ) ;
84
- } ;
85
- var postData = '' ;
86
- if ( userOptions . data ) {
87
- postData = ( $ . type ( userOptions . data ) === 'string' ) ? userOptions . data : $ . param ( userOptions . data ) ;
88
- }
89
- xdr . open ( options . type , options . url ) ;
90
- xdr . send ( postData ) ;
91
- } ,
92
- abort : function ( ) {
93
- if ( xdr ) {
94
- xdr . abort ( ) ;
70
+ } else if ( userType === 'xml' || ( userType !== 'text' && / \/ x m l / i. test ( xdr . contentType ) ) ) {
71
+ var doc = new ActiveXObject ( 'Microsoft.XMLDOM' ) ;
72
+ doc . async = false ;
73
+ try {
74
+ doc . loadXML ( xdr . responseText ) ;
75
+ } catch ( e ) {
76
+ doc = undefined ;
77
+ }
78
+ if ( ! doc || ! doc . documentElement || doc . getElementsByTagName ( 'parsererror' ) . length ) {
79
+ status . code = 500 ;
80
+ status . message = 'parseerror' ;
81
+ throw 'Invalid XML: ' + xdr . responseText ;
82
+ }
83
+ responses . xml = doc ;
95
84
}
85
+ } catch ( parseMessage ) {
86
+ throw parseMessage ;
87
+ } finally {
88
+ complete ( status . code , status . message , responses , allResponseHeaders ) ;
96
89
}
97
90
} ;
91
+
92
+ // set an empty handler for 'onprogress' so requests don't get aborted
93
+ xdr . onprogress = function ( ) { } ;
94
+ xdr . onerror = function ( ) {
95
+ complete ( 500 , 'error' , {
96
+ text : xdr . responseText
97
+ } ) ;
98
+ } ;
99
+
100
+ if ( userOptions . data ) {
101
+ postData = ( $ . type ( userOptions . data ) === 'string' ) ? userOptions . data : $ . param ( userOptions . data ) ;
102
+ }
103
+ xdr . open ( options . type , options . url ) ;
104
+ xdr . send ( postData ) ;
105
+ } ,
106
+ abort : function ( ) {
107
+ if ( xdr ) {
108
+ xdr . abort ( ) ;
109
+ }
98
110
}
99
- } ) ;
100
- }
111
+ } ;
112
+ } ) ;
101
113
102
114
} ) ) ;
0 commit comments