annotate default/node_modules/jquery/src/ajax/jsonp.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/isFunction",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
4 "./var/nonce",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
5 "./var/rquery",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
6 "../ajax"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
7 ], function( jQuery, isFunction, nonce, rquery ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
8
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
9 "use strict";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
10
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
11 var oldCallbacks = [],
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
12 rjsonp = /(=)\?(?=&|$)|\?\?/;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
13
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
14 // Default jsonp settings
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
15 jQuery.ajaxSetup( {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
16 jsonp: "callback",
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
17 jsonpCallback: function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
18 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
19 this[ callback ] = true;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
20 return callback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
21 }
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 // Detect, normalize options and install callbacks for jsonp requests
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
25 jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
26
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
27 var callbackName, overwritten, responseContainer,
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
28 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
29 "url" :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
30 typeof s.data === "string" &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
31 ( s.contentType || "" )
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
32 .indexOf( "application/x-www-form-urlencoded" ) === 0 &&
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
33 rjsonp.test( s.data ) && "data"
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
34 );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
35
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
36 // Handle iff the expected data type is "jsonp" or we have a parameter to set
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
37 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
38
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
39 // Get callback name, remembering preexisting value associated with it
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
40 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
41 s.jsonpCallback() :
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
42 s.jsonpCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
43
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
44 // Insert callback into url or form data
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
45 if ( jsonProp ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
46 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
47 } else if ( s.jsonp !== false ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
48 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
49 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
50
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
51 // Use data converter to retrieve json after script execution
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
52 s.converters[ "script json" ] = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
53 if ( !responseContainer ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
54 jQuery.error( callbackName + " was not called" );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
55 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
56 return responseContainer[ 0 ];
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 // Force json dataType
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
60 s.dataTypes[ 0 ] = "json";
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
61
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
62 // Install callback
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
63 overwritten = window[ callbackName ];
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
64 window[ callbackName ] = function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
65 responseContainer = arguments;
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 // Clean-up function (fires after converters)
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
69 jqXHR.always( function() {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
70
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
71 // If previous value didn't exist - remove it
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
72 if ( overwritten === undefined ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
73 jQuery( window ).removeProp( callbackName );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
74
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
75 // Otherwise restore preexisting value
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
76 } else {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
77 window[ callbackName ] = overwritten;
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 // Save back as free
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
81 if ( s[ callbackName ] ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
82
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
83 // Make sure that re-using the options doesn't screw things around
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
84 s.jsonpCallback = originalSettings.jsonpCallback;
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
85
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
86 // Save the callback name for future use
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
87 oldCallbacks.push( callbackName );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
88 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
89
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
90 // Call if it was a function and we have a response
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
91 if ( responseContainer && isFunction( overwritten ) ) {
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
92 overwritten( responseContainer[ 0 ] );
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
93 }
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
94
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
95 responseContainer = overwritten = undefined;
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 // Delegate to script
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
99 return "script";
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
1d038bc9b3d2 Up:default
Liny <dev@neowd.com>
parents:
diff changeset
103 } );