| 14217 |
anikendra |
1 |
define([
|
|
|
2 |
"../core",
|
|
|
3 |
"./var/nonce",
|
|
|
4 |
"./var/rquery",
|
|
|
5 |
"../ajax"
|
|
|
6 |
], function( jQuery, nonce, rquery ) {
|
|
|
7 |
|
|
|
8 |
var oldCallbacks = [],
|
|
|
9 |
rjsonp = /(=)\?(?=&|$)|\?\?/;
|
|
|
10 |
|
|
|
11 |
// Default jsonp settings
|
|
|
12 |
jQuery.ajaxSetup({
|
|
|
13 |
jsonp: "callback",
|
|
|
14 |
jsonpCallback: function() {
|
|
|
15 |
var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
|
|
|
16 |
this[ callback ] = true;
|
|
|
17 |
return callback;
|
|
|
18 |
}
|
|
|
19 |
});
|
|
|
20 |
|
|
|
21 |
// Detect, normalize options and install callbacks for jsonp requests
|
|
|
22 |
jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
|
|
|
23 |
|
|
|
24 |
var callbackName, overwritten, responseContainer,
|
|
|
25 |
jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
|
|
|
26 |
"url" :
|
|
|
27 |
typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
|
|
|
28 |
);
|
|
|
29 |
|
|
|
30 |
// Handle iff the expected data type is "jsonp" or we have a parameter to set
|
|
|
31 |
if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
|
|
|
32 |
|
|
|
33 |
// Get callback name, remembering preexisting value associated with it
|
|
|
34 |
callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
|
|
|
35 |
s.jsonpCallback() :
|
|
|
36 |
s.jsonpCallback;
|
|
|
37 |
|
|
|
38 |
// Insert callback into url or form data
|
|
|
39 |
if ( jsonProp ) {
|
|
|
40 |
s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
|
|
|
41 |
} else if ( s.jsonp !== false ) {
|
|
|
42 |
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
|
|
|
43 |
}
|
|
|
44 |
|
|
|
45 |
// Use data converter to retrieve json after script execution
|
|
|
46 |
s.converters["script json"] = function() {
|
|
|
47 |
if ( !responseContainer ) {
|
|
|
48 |
jQuery.error( callbackName + " was not called" );
|
|
|
49 |
}
|
|
|
50 |
return responseContainer[ 0 ];
|
|
|
51 |
};
|
|
|
52 |
|
|
|
53 |
// force json dataType
|
|
|
54 |
s.dataTypes[ 0 ] = "json";
|
|
|
55 |
|
|
|
56 |
// Install callback
|
|
|
57 |
overwritten = window[ callbackName ];
|
|
|
58 |
window[ callbackName ] = function() {
|
|
|
59 |
responseContainer = arguments;
|
|
|
60 |
};
|
|
|
61 |
|
|
|
62 |
// Clean-up function (fires after converters)
|
|
|
63 |
jqXHR.always(function() {
|
|
|
64 |
// Restore preexisting value
|
|
|
65 |
window[ callbackName ] = overwritten;
|
|
|
66 |
|
|
|
67 |
// Save back as free
|
|
|
68 |
if ( s[ callbackName ] ) {
|
|
|
69 |
// make sure that re-using the options doesn't screw things around
|
|
|
70 |
s.jsonpCallback = originalSettings.jsonpCallback;
|
|
|
71 |
|
|
|
72 |
// save the callback name for future use
|
|
|
73 |
oldCallbacks.push( callbackName );
|
|
|
74 |
}
|
|
|
75 |
|
|
|
76 |
// Call if it was a function and we have a response
|
|
|
77 |
if ( responseContainer && jQuery.isFunction( overwritten ) ) {
|
|
|
78 |
overwritten( responseContainer[ 0 ] );
|
|
|
79 |
}
|
|
|
80 |
|
|
|
81 |
responseContainer = overwritten = undefined;
|
|
|
82 |
});
|
|
|
83 |
|
|
|
84 |
// Delegate to script
|
|
|
85 |
return "script";
|
|
|
86 |
}
|
|
|
87 |
});
|
|
|
88 |
|
|
|
89 |
});
|