annotate default/node_modules/shoestring/src/ajax/ajax.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 //>>excludeStart("exclude", pragmas.exclude);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
2 define([ "shoestring" ], function(){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
3 //>>excludeEnd("exclude");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 /**
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 * Make an HTTP request to a url.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8 * **NOTE** the following options are supported:
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10 * - *method* - The HTTP method used with the request. Default: `GET`.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 * - *data* - Raw object with keys and values to pass with request as query params. Default `null`.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 * - *headers* - Set of request headers to add. Default `{}`.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13 * - *async* - Whether the opened request is asynchronouse. Default `true`.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 * - *success* - Callback for successful request and response. Passed the response data.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 * - *error* - Callback for failed request and response.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 * - *cancel* - Callback for cancelled request and response.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 *
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 * @param {string} url The url to request.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 * @param {object} options The options object, see Notes.
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 * @return shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 * @this shoestring
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
22 */
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
23
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
24 shoestring.ajax = function( url, options ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 var params = "", req = new XMLHttpRequest(), settings, key;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 settings = shoestring.extend( {}, shoestring.ajax.settings );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 if( options ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 shoestring.extend( settings, options );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 if( !url ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 url = settings.url;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 if( !req || !url ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38 return;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 // create parameter string from data object
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 if( settings.data ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43 for( key in settings.data ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 if( settings.data.hasOwnProperty( key ) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 if( params !== "" ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 params += "&";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 params += encodeURIComponent( key ) + "=" +
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 encodeURIComponent( settings.data[key] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50 }
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 // append params to url for GET requests
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 if( settings.method === "GET" && params ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 //>>includeStart("development", pragmas.development);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
57 if( url.indexOf("?") >= 0 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
58 shoestring.error( 'ajax-url-query' );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
59 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 //>>includeEnd("development");
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 url += "?" + params;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 req.open( settings.method, url, settings.async );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
66
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
67 if( req.setRequestHeader ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
68 req.setRequestHeader( "X-Requested-With", "XMLHttpRequest" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70 // Set 'Content-type' header for POST requests
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 if( settings.method === "POST" && params ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 req.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 for( key in settings.headers ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 if( settings.headers.hasOwnProperty( key ) ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 req.setRequestHeader(key, settings.headers[ key ]);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
78 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
79 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
80 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82 req.onreadystatechange = function () {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 if( req.readyState === 4 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 // Trim the whitespace so shoestring('<div>') works
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85 var res = (req.responseText || '').replace(/^\s+|\s+$/g, '');
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 if( req.status.toString().indexOf( "0" ) === 0 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 return settings.cancel( res, req.status, req );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89 else if ( req.status.toString().match( /^(4|5)/ ) && RegExp.$1 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 return settings.error( res, req.status, req );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 else if (settings.success) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 return settings.success( res, req.status, req );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 }
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 if( req.readyState === 4 ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 return req;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
100 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
101
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
102 // Send request
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 if( settings.method === "POST" && params ){
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
104 req.send( params );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
105 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
106 req.send();
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
107 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
108
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
109 return req;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
110 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
111
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
112 shoestring.ajax.settings = {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
113 success: function(){},
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
114 error: function(){},
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
115 cancel: function(){},
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
116 method: "GET",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
117 async: true,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
118 data: null,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
119 headers: {}
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
120 };
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
121
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
122 //>>excludeStart("exclude", pragmas.exclude);
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
123 });
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
124 //>>excludeEnd("exclude");