JAVASCRIPT 5
Jsonp.js Guest on 8th April 2021 06:01:26 AM
  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. });

Paste-bin is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.