| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-data-JsonP'>/**
 
- </span> * @class Ext.data.JsonP
 
-  * @singleton
 
-  * This class is used to create JSONP requests. JSONP is a mechanism that allows for making
 
-  * requests for data cross domain. More information is available <a href="http://en.wikipedia.org/wiki/JSONP">here</a>.
 
-  */
 
- Ext.define('Ext.data.JsonP', {
 
-     /* Begin Definitions */
 
-     singleton: true,
 
-     /* End Definitions */
 
- <span id='Ext-data-JsonP-property-requestCount'>    /**
 
- </span>     * Number of requests done so far.
 
-      * @private
 
-      */
 
-     requestCount: 0,
 
- <span id='Ext-data-JsonP-property-requests'>    /**
 
- </span>     * Hash of pending requests.
 
-      * @private
 
-      */
 
-     requests: {},
 
- <span id='Ext-data-JsonP-property-timeout'>    /**
 
- </span>     * @property timeout
 
-      * @type Number
 
-      * A default timeout for any JsonP requests. If the request has not completed in this time the
 
-      * failure callback will be fired. The timeout is in ms. Defaults to <tt>30000</tt>.
 
-      */
 
-     timeout: 30000,
 
- <span id='Ext-data-JsonP-property-disableCaching'>    /**
 
- </span>     * @property disableCaching
 
-      * @type Boolean
 
-      * True to add a unique cache-buster param to requests. Defaults to <tt>true</tt>.
 
-      */
 
-     disableCaching: true,
 
- <span id='Ext-data-JsonP-property-disableCachingParam'>    /**
 
- </span>     * @property disableCachingParam
 
-      * @type String
 
-      * Change the parameter which is sent went disabling caching through a cache buster. Defaults to <tt>'_dc'</tt>.
 
-      */
 
-     disableCachingParam: '_dc',
 
- <span id='Ext-data-JsonP-property-callbackKey'>    /**
 
- </span>     * @property callbackKey
 
-      * @type String
 
-      * Specifies the GET parameter that will be sent to the server containing the function name to be executed when
 
-      * the request completes. Defaults to <tt>callback</tt>. Thus, a common request will be in the form of
 
-      * url?callback=Ext.data.JsonP.callback1
 
-      */
 
-     callbackKey: 'callback',
 
- <span id='Ext-data-JsonP-method-request'>    /**
 
- </span>     * Makes a JSONP request.
 
-      * @param {Object} options An object which may contain the following properties. Note that options will
 
-      * take priority over any defaults that are specified in the class.
 
-      * <ul>
 
-      * <li><b>url</b> : String <div class="sub-desc">The URL to request.</div></li>
 
-      * <li><b>params</b> : Object (Optional)<div class="sub-desc">An object containing a series of
 
-      * key value pairs that will be sent along with the request.</div></li>
 
-      * <li><b>timeout</b> : Number (Optional) <div class="sub-desc">See {@link #timeout}</div></li>
 
-      * <li><b>callbackKey</b> : String (Optional) <div class="sub-desc">See {@link #callbackKey}</div></li>
 
-      * <li><b>callbackName</b> : String (Optional) <div class="sub-desc">The function name to use for this request.
 
-      * By default this name will be auto-generated: Ext.data.JsonP.callback1, Ext.data.JsonP.callback2, etc.
 
-      * Setting this option to "my_name" will force the function name to be Ext.data.JsonP.my_name.
 
-      * Use this if you want deterministic behavior, but be careful - the callbackName should be different
 
-      * in each JsonP request that you make.</div></li>
 
-      * <li><b>disableCaching</b> : Boolean (Optional) <div class="sub-desc">See {@link #disableCaching}</div></li>
 
-      * <li><b>disableCachingParam</b> : String (Optional) <div class="sub-desc">See {@link #disableCachingParam}</div></li>
 
-      * <li><b>success</b> : Function (Optional) <div class="sub-desc">A function to execute if the request succeeds.</div></li>
 
-      * <li><b>failure</b> : Function (Optional) <div class="sub-desc">A function to execute if the request fails.</div></li>
 
-      * <li><b>callback</b> : Function (Optional) <div class="sub-desc">A function to execute when the request
 
-      * completes, whether it is a success or failure.</div></li>
 
-      * <li><b>scope</b> : Object (Optional)<div class="sub-desc">The scope in
 
-      * which to execute the callbacks: The "this" object for the callback function. Defaults to the browser window.</div></li>
 
-      * </ul>
 
-      * @return {Object} request An object containing the request details.
 
-      */
 
-     request: function(options){
 
-         options = Ext.apply({}, options);
 
-         //<debug>
 
-         if (!options.url) {
 
-             Ext.Error.raise('A url must be specified for a JSONP request.');
 
-         }
 
-         //</debug>
 
-         var me = this,
 
-             disableCaching = Ext.isDefined(options.disableCaching) ? options.disableCaching : me.disableCaching,
 
-             cacheParam = options.disableCachingParam || me.disableCachingParam,
 
-             id = ++me.requestCount,
 
-             callbackName = options.callbackName || 'callback' + id,
 
-             callbackKey = options.callbackKey || me.callbackKey,
 
-             timeout = Ext.isDefined(options.timeout) ? options.timeout : me.timeout,
 
-             params = Ext.apply({}, options.params),
 
-             url = options.url,
 
-             name = Ext.name,
 
-             request,
 
-             script;
 
-         params[callbackKey] = name + '.data.JsonP.' + callbackName;
 
-         if (disableCaching) {
 
-             params[cacheParam] = new Date().getTime();
 
-         }
 
-         script = me.createScript(url, params, options);
 
-         me.requests[id] = request = {
 
-             url: url,
 
-             params: params,
 
-             script: script,
 
-             id: id,
 
-             scope: options.scope,
 
-             success: options.success,
 
-             failure: options.failure,
 
-             callback: options.callback,
 
-             callbackKey: callbackKey,
 
-             callbackName: callbackName
 
-         };
 
-         if (timeout > 0) {
 
-             request.timeout = setTimeout(Ext.bind(me.handleTimeout, me, [request]), timeout);
 
-         }
 
-         me.setupErrorHandling(request);
 
-         me[callbackName] = Ext.bind(me.handleResponse, me, [request], true);
 
-         me.loadScript(request);
 
-         return request;
 
-     },
 
- <span id='Ext-data-JsonP-method-abort'>    /**
 
- </span>     * Abort a request. If the request parameter is not specified all open requests will
 
-      * be aborted.
 
-      * @param {Object/String} request (Optional) The request to abort
 
-      */
 
-     abort: function(request){
 
-         var me = this,
 
-             requests = me.requests,
 
-             key;
 
-         if (request) {
 
-             if (!request.id) {
 
-                 request = requests[request];
 
-             }
 
-             me.handleAbort(request);
 
-         } else {
 
-             for (key in requests) {
 
-                 if (requests.hasOwnProperty(key)) {
 
-                     me.abort(requests[key]);
 
-                 }
 
-             }
 
-         }
 
-     },
 
- <span id='Ext-data-JsonP-method-setupErrorHandling'>    /**
 
- </span>     * Sets up error handling for the script
 
-      * @private
 
-      * @param {Object} request The request
 
-      */
 
-     setupErrorHandling: function(request){
 
-         request.script.onerror = Ext.bind(this.handleError, this, [request]);
 
-     },
 
- <span id='Ext-data-JsonP-method-handleAbort'>    /**
 
- </span>     * Handles any aborts when loading the script
 
-      * @private
 
-      * @param {Object} request The request
 
-      */
 
-     handleAbort: function(request){
 
-         request.errorType = 'abort';
 
-         this.handleResponse(null, request);
 
-     },
 
- <span id='Ext-data-JsonP-method-handleError'>    /**
 
- </span>     * Handles any script errors when loading the script
 
-      * @private
 
-      * @param {Object} request The request
 
-      */
 
-     handleError: function(request){
 
-         request.errorType = 'error';
 
-         this.handleResponse(null, request);
 
-     },
 
- <span id='Ext-data-JsonP-method-cleanupErrorHandling'>    /**
 
- </span>     * Cleans up anu script handling errors
 
-      * @private
 
-      * @param {Object} request The request
 
-      */
 
-     cleanupErrorHandling: function(request){
 
-         request.script.onerror = null;
 
-     },
 
- <span id='Ext-data-JsonP-method-handleTimeout'>    /**
 
- </span>     * Handle any script timeouts
 
-      * @private
 
-      * @param {Object} request The request
 
-      */
 
-     handleTimeout: function(request){
 
-         request.errorType = 'timeout';
 
-         this.handleResponse(null, request);
 
-     },
 
- <span id='Ext-data-JsonP-method-handleResponse'>    /**
 
- </span>     * Handle a successful response
 
-      * @private
 
-      * @param {Object} result The result from the request
 
-      * @param {Object} request The request
 
-      */
 
-     handleResponse: function(result, request){
 
-         var success = true;
 
-         if (request.timeout) {
 
-             clearTimeout(request.timeout);
 
-         }
 
-         delete this[request.callbackName];
 
-         delete this.requests[request.id];
 
-         this.cleanupErrorHandling(request);
 
-         Ext.fly(request.script).remove();
 
-         if (request.errorType) {
 
-             success = false;
 
-             Ext.callback(request.failure, request.scope, [request.errorType]);
 
-         } else {
 
-             Ext.callback(request.success, request.scope, [result]);
 
-         }
 
-         Ext.callback(request.callback, request.scope, [success, result, request.errorType]);
 
-     },
 
- <span id='Ext-data-JsonP-method-createScript'>    /**
 
- </span>     * Create the script tag given the specified url, params and options. The options
 
-      * parameter is passed to allow an override to access it.
 
-      * @private
 
-      * @param {String} url The url of the request
 
-      * @param {Object} params Any extra params to be sent
 
-      * @param {Object} options The object passed to {@link #request}.
 
-      */
 
-     createScript: function(url, params, options) {
 
-         var script = document.createElement('script');
 
-         script.setAttribute("src", Ext.urlAppend(url, Ext.Object.toQueryString(params)));
 
-         script.setAttribute("async", true);
 
-         script.setAttribute("type", "text/javascript");
 
-         return script;
 
-     },
 
- <span id='Ext-data-JsonP-method-loadScript'>    /**
 
- </span>     * Loads the script for the given request by appending it to the HEAD element. This is
 
-      * its own method so that users can override it (as well as {@link #createScript}).
 
-      * @private
 
-      * @param request The request object.
 
-      */
 
-     loadScript: function (request) {
 
-         Ext.getHead().appendChild(request.script);
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |