| (function( jQuery ) { |
| |
| var jsc = jQuery.now(), |
| jsre = /(\=)\?(&|$)|\?\?/i; |
| |
| // Default jsonp settings |
| jQuery.ajaxSetup({ |
| jsonp: "callback", |
| jsonpCallback: function() { |
| return jQuery.expando + "_" + ( jsc++ ); |
| } |
| }); |
| |
| // Detect, normalize options and install callbacks for jsonp requests |
| jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { |
| |
| var dataIsString = ( typeof s.data === "string" ); |
| |
| if ( s.dataTypes[ 0 ] === "jsonp" || |
| originalSettings.jsonpCallback || |
| originalSettings.jsonp != null || |
| s.jsonp !== false && ( jsre.test( s.url ) || |
| dataIsString && jsre.test( s.data ) ) ) { |
| |
| var responseContainer, |
| jsonpCallback = s.jsonpCallback = |
| jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback, |
| previous = window[ jsonpCallback ], |
| url = s.url, |
| data = s.data, |
| replace = "$1" + jsonpCallback + "$2", |
| cleanUp = function() { |
| // Set callback back to previous value |
| window[ jsonpCallback ] = previous; |
| // Call if it was a function and we have a response |
| if ( responseContainer && jQuery.isFunction( previous ) ) { |
| window[ jsonpCallback ]( responseContainer[ 0 ] ); |
| } |
| }; |
| |
| if ( s.jsonp !== false ) { |
| url = url.replace( jsre, replace ); |
| if ( s.url === url ) { |
| if ( dataIsString ) { |
| data = data.replace( jsre, replace ); |
| } |
| if ( s.data === data ) { |
| // Add callback manually |
| url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback; |
| } |
| } |
| } |
| |
| s.url = url; |
| s.data = data; |
| |
| // Install callback |
| window[ jsonpCallback ] = function( response ) { |
| responseContainer = [ response ]; |
| }; |
| |
| // Install cleanUp function |
| jqXHR.then( cleanUp, cleanUp ); |
| |
| // Use data converter to retrieve json after script execution |
| s.converters["script json"] = function() { |
| if ( !responseContainer ) { |
| jQuery.error( jsonpCallback + " was not called" ); |
| } |
| return responseContainer[ 0 ]; |
| }; |
| |
| // force json dataType |
| s.dataTypes[ 0 ] = "json"; |
| |
| // Delegate to script |
| return "script"; |
| } |
| } ); |
| |
| })( jQuery ); |