[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/lib/yuilib/2in3/2.9.0/build/yui2-connectioncore/ -> yui2-connectioncore-debug.js (source)

   1  YUI.add('yui2-connectioncore', function(Y) {
   2      var YAHOO    = Y.YUI2;
   3      /*
   4  Copyright (c) 2011, Yahoo! Inc. All rights reserved.
   5  Code licensed under the BSD License:
   6  http://developer.yahoo.com/yui/license.html
   7  version: 2.9.0
   8  */
   9  /**
  10   * The Connection Manager provides a simplified interface to the XMLHttpRequest
  11   * object.  It handles cross-browser instantiantion of XMLHttpRequest, negotiates the
  12   * interactive states and server response, returning the results to a pre-defined
  13   * callback you create.
  14   *
  15   * @namespace YAHOO.util
  16   * @module connection
  17   * @requires yahoo
  18   * @requires event
  19   */
  20  
  21  /**
  22   * The Connection Manager singleton provides methods for creating and managing
  23   * asynchronous transactions.
  24   *
  25   * @class YAHOO.util.Connect
  26   */
  27  
  28  YAHOO.util.Connect =
  29  {
  30    /**
  31     * @description Array of MSFT ActiveX ids for XMLHttpRequest.
  32     * @property _msxml_progid
  33     * @private
  34     * @static
  35     * @type array
  36     */
  37      _msxml_progid:[
  38          'Microsoft.XMLHTTP',
  39          'MSXML2.XMLHTTP.3.0',
  40          'MSXML2.XMLHTTP'
  41          ],
  42  
  43    /**
  44     * @description Object literal of HTTP header(s)
  45     * @property _http_header
  46     * @private
  47     * @static
  48     * @type object
  49     */
  50      _http_headers:{},
  51  
  52    /**
  53     * @description Determines if HTTP headers are set.
  54     * @property _has_http_headers
  55     * @private
  56     * @static
  57     * @type boolean
  58     */
  59      _has_http_headers:false,
  60  
  61   /**
  62    * @description Determines if a default header of
  63    * Content-Type of 'application/x-www-form-urlencoded'
  64    * will be added to any client HTTP headers sent for POST
  65    * transactions.
  66    * @property _use_default_post_header
  67    * @private
  68    * @static
  69    * @type boolean
  70    */
  71      _use_default_post_header:true,
  72  
  73   /**
  74    * @description The default header used for POST transactions.
  75    * @property _default_post_header
  76    * @private
  77    * @static
  78    * @type boolean
  79    */
  80      _default_post_header:'application/x-www-form-urlencoded; charset=UTF-8',
  81  
  82   /**
  83    * @description The default header used for transactions involving the
  84    * use of HTML forms.
  85    * @property _default_form_header
  86    * @private
  87    * @static
  88    * @type boolean
  89    */
  90      _default_form_header:'application/x-www-form-urlencoded',
  91  
  92   /**
  93    * @description Determines if a default header of
  94    * 'X-Requested-With: XMLHttpRequest'
  95    * will be added to each transaction.
  96    * @property _use_default_xhr_header
  97    * @private
  98    * @static
  99    * @type boolean
 100    */
 101      _use_default_xhr_header:true,
 102  
 103   /**
 104    * @description The default header value for the label
 105    * "X-Requested-With".  This is sent with each
 106    * transaction, by default, to identify the
 107    * request as being made by YUI Connection Manager.
 108    * @property _default_xhr_header
 109    * @private
 110    * @static
 111    * @type boolean
 112    */
 113      _default_xhr_header:'XMLHttpRequest',
 114  
 115   /**
 116    * @description Determines if custom, default headers
 117    * are set for each transaction.
 118    * @property _has_default_header
 119    * @private
 120    * @static
 121    * @type boolean
 122    */
 123      _has_default_headers:true,
 124  
 125   /**
 126     * @description Property modified by setForm() to determine if the data
 127     * should be submitted as an HTML form.
 128     * @property _isFormSubmit
 129     * @private
 130     * @static
 131     * @type boolean
 132     */
 133      _isFormSubmit:false,
 134  
 135   /**
 136    * @description Determines if custom, default headers
 137    * are set for each transaction.
 138    * @property _has_default_header
 139    * @private
 140    * @static
 141    * @type boolean
 142    */
 143      _default_headers:{},
 144  
 145   /**
 146    * @description Collection of polling references to the polling mechanism in handleReadyState.
 147    * @property _poll
 148    * @private
 149    * @static
 150    * @type object
 151    */
 152      _poll:{},
 153  
 154   /**
 155    * @description Queue of timeout values for each transaction callback with a defined timeout value.
 156    * @property _timeOut
 157    * @private
 158    * @static
 159    * @type object
 160    */
 161      _timeOut:{},
 162  
 163    /**
 164     * @description The polling frequency, in milliseconds, for HandleReadyState.
 165     * when attempting to determine a transaction's XHR readyState.
 166     * The default is 50 milliseconds.
 167     * @property _polling_interval
 168     * @private
 169     * @static
 170     * @type int
 171     */
 172       _polling_interval:50,
 173  
 174    /**
 175     * @description A transaction counter that increments the transaction id for each transaction.
 176     * @property _transaction_id
 177     * @private
 178     * @static
 179     * @type int
 180     */
 181       _transaction_id:0,
 182  
 183    /**
 184     * @description Custom event that fires at the start of a transaction
 185     * @property startEvent
 186     * @private
 187     * @static
 188     * @type CustomEvent
 189     */
 190      startEvent: new YAHOO.util.CustomEvent('start'),
 191  
 192    /**
 193     * @description Custom event that fires when a transaction response has completed.
 194     * @property completeEvent
 195     * @private
 196     * @static
 197     * @type CustomEvent
 198     */
 199      completeEvent: new YAHOO.util.CustomEvent('complete'),
 200  
 201    /**
 202     * @description Custom event that fires when handleTransactionResponse() determines a
 203     * response in the HTTP 2xx range.
 204     * @property successEvent
 205     * @private
 206     * @static
 207     * @type CustomEvent
 208     */
 209      successEvent: new YAHOO.util.CustomEvent('success'),
 210  
 211    /**
 212     * @description Custom event that fires when handleTransactionResponse() determines a
 213     * response in the HTTP 4xx/5xx range.
 214     * @property failureEvent
 215     * @private
 216     * @static
 217     * @type CustomEvent
 218     */
 219      failureEvent: new YAHOO.util.CustomEvent('failure'),
 220  
 221    /**
 222     * @description Custom event that fires when a transaction is successfully aborted.
 223     * @property abortEvent
 224     * @private
 225     * @static
 226     * @type CustomEvent
 227     */
 228      abortEvent: new YAHOO.util.CustomEvent('abort'),
 229  
 230    /**
 231     * @description A reference table that maps callback custom events members to its specific
 232     * event name.
 233     * @property _customEvents
 234     * @private
 235     * @static
 236     * @type object
 237     */
 238      _customEvents:
 239      {
 240          onStart:['startEvent', 'start'],
 241          onComplete:['completeEvent', 'complete'],
 242          onSuccess:['successEvent', 'success'],
 243          onFailure:['failureEvent', 'failure'],
 244          onUpload:['uploadEvent', 'upload'],
 245          onAbort:['abortEvent', 'abort']
 246      },
 247  
 248    /**
 249     * @description Member to add an ActiveX id to the existing xml_progid array.
 250     * In the event(unlikely) a new ActiveX id is introduced, it can be added
 251     * without internal code modifications.
 252     * @method setProgId
 253     * @public
 254     * @static
 255     * @param {string} id The ActiveX id to be added to initialize the XHR object.
 256     * @return void
 257     */
 258      setProgId:function(id)
 259      {
 260          this._msxml_progid.unshift(id);
 261          YAHOO.log('ActiveX Program Id  ' + id + ' added to _msxml_progid.', 'info', 'Connection');
 262      },
 263  
 264    /**
 265     * @description Member to override the default POST header.
 266     * @method setDefaultPostHeader
 267     * @public
 268     * @static
 269     * @param {boolean} b Set and use default header - true or false .
 270     * @return void
 271     */
 272      setDefaultPostHeader:function(b)
 273      {
 274          if(typeof b == 'string'){
 275              this._default_post_header = b;
 276              this._use_default_post_header = true;
 277  
 278              YAHOO.log('Default POST header set to  ' + b, 'info', 'Connection');
 279          }
 280          else if(typeof b == 'boolean'){
 281              this._use_default_post_header = b;
 282          }
 283      },
 284  
 285    /**
 286     * @description Member to override the default transaction header..
 287     * @method setDefaultXhrHeader
 288     * @public
 289     * @static
 290     * @param {boolean} b Set and use default header - true or false .
 291     * @return void
 292     */
 293      setDefaultXhrHeader:function(b)
 294      {
 295          if(typeof b == 'string'){
 296              this._default_xhr_header = b;
 297              YAHOO.log('Default XHR header set to  ' + b, 'info', 'Connection');
 298          }
 299          else{
 300              this._use_default_xhr_header = b;
 301          }
 302      },
 303  
 304    /**
 305     * @description Member to modify the default polling interval.
 306     * @method setPollingInterval
 307     * @public
 308     * @static
 309     * @param {int} i The polling interval in milliseconds.
 310     * @return void
 311     */
 312      setPollingInterval:function(i)
 313      {
 314          if(typeof i == 'number' && isFinite(i)){
 315              this._polling_interval = i;
 316              YAHOO.log('Default polling interval set to ' + i +'ms', 'info', 'Connection');
 317          }
 318      },
 319  
 320    /**
 321     * @description Instantiates a XMLHttpRequest object and returns an object with two properties:
 322     * the XMLHttpRequest instance and the transaction id.
 323     * @method createXhrObject
 324     * @private
 325     * @static
 326     * @param {int} transactionId Property containing the transaction id for this transaction.
 327     * @return object
 328     */
 329      createXhrObject:function(transactionId)
 330      {
 331          var obj,http,i;
 332          try
 333          {
 334              // Instantiates XMLHttpRequest in non-IE browsers and assigns to http.
 335              http = new XMLHttpRequest();
 336              //  Object literal with http and tId properties
 337              obj = { conn:http, tId:transactionId, xhr: true };
 338              YAHOO.log('XHR object created for transaction ' + transactionId, 'info', 'Connection');
 339          }
 340          catch(e)
 341          {
 342              for(i=0; i<this._msxml_progid.length; ++i){
 343                  try
 344                  {
 345                      // Instantiates XMLHttpRequest for IE and assign to http
 346                      http = new ActiveXObject(this._msxml_progid[i]);
 347                      //  Object literal with conn and tId properties
 348                      obj = { conn:http, tId:transactionId, xhr: true };
 349                      YAHOO.log('ActiveX XHR object created for transaction ' + transactionId, 'info', 'Connection');
 350                      break;
 351                  }
 352                  catch(e1){}
 353              }
 354          }
 355          finally
 356          {
 357              return obj;
 358          }
 359      },
 360  
 361    /**
 362     * @description This method is called by asyncRequest to create a
 363     * valid connection object for the transaction.  It also passes a
 364     * transaction id and increments the transaction id counter.
 365     * @method getConnectionObject
 366     * @private
 367     * @static
 368     * @return {object}
 369     */
 370      getConnectionObject:function(t)
 371      {
 372          var o, tId = this._transaction_id;
 373  
 374          try
 375          {
 376              if(!t){
 377                  o = this.createXhrObject(tId);
 378              }
 379              else{
 380                  o = {tId:tId};
 381                  if(t==='xdr'){
 382                      o.conn = this._transport;
 383                      o.xdr = true;
 384                  }
 385                  else if(t==='upload'){
 386                      o.upload = true;
 387                  }
 388              }
 389  
 390              if(o){
 391                  this._transaction_id++;
 392              }
 393          }
 394          catch(e){}
 395          return o;
 396      },
 397  
 398    /**
 399     * @description Method for initiating an asynchronous request via the XHR object.
 400     * @method asyncRequest
 401     * @public
 402     * @static
 403     * @param {string} method HTTP transaction method
 404     * @param {string} uri Fully qualified path of resource
 405     * @param {callback} callback User-defined callback function or object
 406     * @param {string} postData POST body
 407     * @return {object} Returns the connection object
 408     */
 409      asyncRequest:function(method, uri, callback, postData)
 410      {
 411          var args = callback&&callback.argument?callback.argument:null,
 412              YCM = this,
 413              o, t;
 414  
 415          if(this._isFileUpload){
 416              t = 'upload';
 417          }
 418          else if(callback && callback.xdr){
 419              t = 'xdr';
 420          }
 421  
 422          o = this.getConnectionObject(t);
 423          if(!o){
 424              YAHOO.log('Unable to create connection object.', 'error', 'Connection');
 425              return null;
 426          }
 427          else{
 428  
 429              // Intialize any transaction-specific custom events, if provided.
 430              if(callback && callback.customevents){
 431                  this.initCustomEvents(o, callback);
 432              }
 433  
 434              if(this._isFormSubmit){
 435                  if(this._isFileUpload){
 436                      window.setTimeout(function(){YCM.uploadFile(o, callback, uri, postData);}, 10);
 437                      return o;
 438                  }
 439  
 440                  // If the specified HTTP method is GET, setForm() will return an
 441                  // encoded string that is concatenated to the uri to
 442                  // create a querystring.
 443                  if(method.toUpperCase() == 'GET'){
 444                      if(this._sFormData.length !== 0){
 445                          // If the URI already contains a querystring, append an ampersand
 446                          // and then concatenate _sFormData to the URI.
 447                          uri += ((uri.indexOf('?') == -1)?'?':'&') + this._sFormData;
 448                      }
 449                  }
 450                  else if(method.toUpperCase() == 'POST'){
 451                      // If POST data exist in addition to the HTML form data,
 452                      // it will be concatenated to the form data.
 453                      postData = postData?this._sFormData + "&" + postData:this._sFormData;
 454                  }
 455              }
 456  
 457              if(method.toUpperCase() == 'GET' && (callback && callback.cache === false)){
 458                  // If callback.cache is defined and set to false, a
 459                  // timestamp value will be added to the querystring.
 460                  uri += ((uri.indexOf('?') == -1)?'?':'&') + "rnd=" + new Date().valueOf().toString();
 461              }
 462  
 463              // Each transaction will automatically include a custom header of
 464              // "X-Requested-With: XMLHttpRequest" to identify the request as
 465              // having originated from Connection Manager.
 466              if(this._use_default_xhr_header){
 467                  if(!this._default_headers['X-Requested-With']){
 468                      this.initHeader('X-Requested-With', this._default_xhr_header, true);
 469                      YAHOO.log('Initialize transaction header X-Request-Header to XMLHttpRequest.', 'info', 'Connection');
 470                  }
 471              }
 472  
 473              //If the transaction method is POST and the POST header value is set to true
 474              //or a custom value, initalize the Content-Type header to this value.
 475              if((method.toUpperCase() === 'POST' && this._use_default_post_header) && this._isFormSubmit === false){
 476                  this.initHeader('Content-Type', this._default_post_header);
 477                  YAHOO.log('Initialize header Content-Type to application/x-www-form-urlencoded; UTF-8 for POST transaction.', 'info', 'Connection');
 478              }
 479  
 480              if(o.xdr){
 481                  this.xdr(o, method, uri, callback, postData);
 482                  return o;
 483              }
 484  
 485              o.conn.open(method, uri, true);
 486              //Initialize all default and custom HTTP headers,
 487              if(this._has_default_headers || this._has_http_headers){
 488                  this.setHeader(o);
 489              }
 490  
 491              this.handleReadyState(o, callback);
 492              o.conn.send(postData || '');
 493              YAHOO.log('Transaction ' + o.tId + ' sent.', 'info', 'Connection');
 494  
 495              // Reset the HTML form data and state properties as
 496              // soon as the data are submitted.
 497              if(this._isFormSubmit === true){
 498                  this.resetFormState();
 499              }
 500  
 501              // Fire global custom event -- startEvent
 502              this.startEvent.fire(o, args);
 503  
 504              if(o.startEvent){
 505                  // Fire transaction custom event -- startEvent
 506                  o.startEvent.fire(o, args);
 507              }
 508  
 509              return o;
 510          }
 511      },
 512  
 513    /**
 514     * @description This method creates and subscribes custom events,
 515     * specific to each transaction
 516     * @method initCustomEvents
 517     * @private
 518     * @static
 519     * @param {object} o The connection object
 520     * @param {callback} callback The user-defined callback object
 521     * @return {void}
 522     */
 523      initCustomEvents:function(o, callback)
 524      {
 525          var prop;
 526          // Enumerate through callback.customevents members and bind/subscribe
 527          // events that match in the _customEvents table.
 528          for(prop in callback.customevents){
 529              if(this._customEvents[prop][0]){
 530                  // Create the custom event
 531                  o[this._customEvents[prop][0]] = new YAHOO.util.CustomEvent(this._customEvents[prop][1], (callback.scope)?callback.scope:null);
 532                  YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' created.', 'info', 'Connection');
 533  
 534                  // Subscribe the custom event
 535                  o[this._customEvents[prop][0]].subscribe(callback.customevents[prop]);
 536                  YAHOO.log('Transaction-specific Custom Event ' + o[this._customEvents[prop][1]] + ' subscribed.', 'info', 'Connection');
 537              }
 538          }
 539      },
 540  
 541    /**
 542     * @description This method serves as a timer that polls the XHR object's readyState
 543     * property during a transaction, instead of binding a callback to the
 544     * onreadystatechange event.  Upon readyState 4, handleTransactionResponse
 545     * will process the response, and the timer will be cleared.
 546     * @method handleReadyState
 547     * @private
 548     * @static
 549     * @param {object} o The connection object
 550     * @param {callback} callback The user-defined callback object
 551     * @return {void}
 552     */
 553  
 554      handleReadyState:function(o, callback)
 555  
 556      {
 557          var oConn = this,
 558              args = (callback && callback.argument)?callback.argument:null;
 559  
 560          if(callback && callback.timeout){
 561              this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);
 562          }
 563  
 564          this._poll[o.tId] = window.setInterval(
 565              function(){
 566                  if(o.conn && o.conn.readyState === 4){
 567  
 568                      // Clear the polling interval for the transaction
 569                      // and remove the reference from _poll.
 570                      window.clearInterval(oConn._poll[o.tId]);
 571                      delete oConn._poll[o.tId];
 572  
 573                      if(callback && callback.timeout){
 574                          window.clearTimeout(oConn._timeOut[o.tId]);
 575                          delete oConn._timeOut[o.tId];
 576                      }
 577  
 578                      // Fire global custom event -- completeEvent
 579                      oConn.completeEvent.fire(o, args);
 580  
 581                      if(o.completeEvent){
 582                          // Fire transaction custom event -- completeEvent
 583                          o.completeEvent.fire(o, args);
 584                      }
 585  
 586                      oConn.handleTransactionResponse(o, callback);
 587                  }
 588              }
 589          ,this._polling_interval);
 590      },
 591  
 592    /**
 593     * @description This method attempts to interpret the server response and
 594     * determine whether the transaction was successful, or if an error or
 595     * exception was encountered.
 596     * @method handleTransactionResponse
 597     * @private
 598     * @static
 599     * @param {object} o The connection object
 600     * @param {object} callback The user-defined callback object
 601     * @param {boolean} isAbort Determines if the transaction was terminated via abort().
 602     * @return {void}
 603     */
 604      handleTransactionResponse:function(o, callback, isAbort)
 605      {
 606          var httpStatus, responseObject,
 607              args = (callback && callback.argument)?callback.argument:null,
 608              xdrS = (o.r && o.r.statusText === 'xdr:success')?true:false,
 609              xdrF = (o.r && o.r.statusText === 'xdr:failure')?true:false,
 610              xdrA = isAbort;
 611  
 612          try
 613          {
 614              if((o.conn.status !== undefined && o.conn.status !== 0) || xdrS){
 615                  // XDR requests will not have HTTP status defined. The
 616                  // statusText property will define the response status
 617                  // set by the Flash transport.
 618                  httpStatus = o.conn.status;
 619              }
 620              else if(xdrF && !xdrA){
 621                  // Set XDR transaction failure to a status of 0, which
 622                  // resolves as an HTTP failure, instead of an exception.
 623                  httpStatus = 0;
 624              }
 625              else{
 626                  httpStatus = 13030;
 627              }
 628          }
 629          catch(e){
 630  
 631               // 13030 is a custom code to indicate the condition -- in Mozilla/FF --
 632               // when the XHR object's status and statusText properties are
 633               // unavailable, and a query attempt throws an exception.
 634              httpStatus = 13030;
 635          }
 636  
 637          if((httpStatus >= 200 && httpStatus < 300) || httpStatus === 1223 || xdrS){
 638              responseObject = o.xdr ? o.r : this.createResponseObject(o, args);
 639              if(callback && callback.success){
 640                  if(!callback.scope){
 641                      callback.success(responseObject);
 642                      YAHOO.log('Success callback. HTTP code is ' + httpStatus, 'info', 'Connection');
 643                  }
 644                  else{
 645                      // If a scope property is defined, the callback will be fired from
 646                      // the context of the object.
 647                      callback.success.apply(callback.scope, [responseObject]);
 648                      YAHOO.log('Success callback with scope. HTTP code is ' + httpStatus, 'info', 'Connection');
 649                  }
 650              }
 651  
 652              // Fire global custom event -- successEvent
 653              this.successEvent.fire(responseObject);
 654  
 655              if(o.successEvent){
 656                  // Fire transaction custom event -- successEvent
 657                  o.successEvent.fire(responseObject);
 658              }
 659          }
 660          else{
 661              switch(httpStatus){
 662                  // The following cases are wininet.dll error codes that may be encountered.
 663                  case 12002: // Server timeout
 664                  case 12029: // 12029 to 12031 correspond to dropped connections.
 665                  case 12030:
 666                  case 12031:
 667                  case 12152: // Connection closed by server.
 668                  case 13030: // See above comments for variable status.
 669                      // XDR transactions will not resolve to this case, since the
 670                      // response object is already built in the xdr response.
 671                      responseObject = this.createExceptionObject(o.tId, args, (isAbort?isAbort:false));
 672                      if(callback && callback.failure){
 673                          if(!callback.scope){
 674                              callback.failure(responseObject);
 675                              YAHOO.log('Failure callback. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
 676                          }
 677                          else{
 678                              callback.failure.apply(callback.scope, [responseObject]);
 679                              YAHOO.log('Failure callback with scope. Exception detected. Status code is ' + httpStatus, 'warn', 'Connection');
 680                          }
 681                      }
 682  
 683                      break;
 684                  default:
 685                      responseObject = (o.xdr) ? o.response : this.createResponseObject(o, args);
 686                      if(callback && callback.failure){
 687                          if(!callback.scope){
 688                              callback.failure(responseObject);
 689                              YAHOO.log('Failure callback. HTTP status code is ' + httpStatus, 'warn', 'Connection');
 690                          }
 691                          else{
 692                              callback.failure.apply(callback.scope, [responseObject]);
 693                              YAHOO.log('Failure callback with scope. HTTP status code is ' + httpStatus, 'warn', 'Connection');
 694                          }
 695                      }
 696              }
 697  
 698              // Fire global custom event -- failureEvent
 699              this.failureEvent.fire(responseObject);
 700  
 701              if(o.failureEvent){
 702                  // Fire transaction custom event -- failureEvent
 703                  o.failureEvent.fire(responseObject);
 704              }
 705  
 706          }
 707  
 708          this.releaseObject(o);
 709          responseObject = null;
 710      },
 711  
 712    /**
 713     * @description This method evaluates the server response, creates and returns the results via
 714     * its properties.  Success and failure cases will differ in the response
 715     * object's property values.
 716     * @method createResponseObject
 717     * @private
 718     * @static
 719     * @param {object} o The connection object
 720     * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
 721     * @return {object}
 722     */
 723      createResponseObject:function(o, callbackArg)
 724      {
 725          var obj = {}, headerObj = {},
 726              i, headerStr, header, delimitPos;
 727  
 728          try
 729          {
 730              headerStr = o.conn.getAllResponseHeaders();
 731              header = headerStr.split('\n');
 732              for(i=0; i<header.length; i++){
 733                  delimitPos = header[i].indexOf(':');
 734                  if(delimitPos != -1){
 735                      headerObj[header[i].substring(0,delimitPos)] = YAHOO.lang.trim(header[i].substring(delimitPos+2));
 736                  }
 737              }
 738          }
 739          catch(e){}
 740  
 741          obj.tId = o.tId;
 742          // Normalize IE's response to HTTP 204 when Win error 1223.
 743          obj.status = (o.conn.status == 1223)?204:o.conn.status;
 744          // Normalize IE's statusText to "No Content" instead of "Unknown".
 745          obj.statusText = (o.conn.status == 1223)?"No Content":o.conn.statusText;
 746          obj.getResponseHeader = headerObj;
 747          obj.getAllResponseHeaders = headerStr;
 748          obj.responseText = o.conn.responseText;
 749          obj.responseXML = o.conn.responseXML;
 750  
 751          if(callbackArg){
 752              obj.argument = callbackArg;
 753          }
 754  
 755          return obj;
 756      },
 757  
 758    /**
 759     * @description If a transaction cannot be completed due to dropped or closed connections,
 760     * there may be not be enough information to build a full response object.
 761     * The failure callback will be fired and this specific condition can be identified
 762     * by a status property value of 0.
 763     *
 764     * If an abort was successful, the status property will report a value of -1.
 765     *
 766     * @method createExceptionObject
 767     * @private
 768     * @static
 769     * @param {int} tId The Transaction Id
 770     * @param {callbackArg} callbackArg The user-defined argument or arguments to be passed to the callback
 771     * @param {boolean} isAbort Determines if the exception case is caused by a transaction abort
 772     * @return {object}
 773     */
 774      createExceptionObject:function(tId, callbackArg, isAbort)
 775      {
 776          var COMM_CODE = 0,
 777              COMM_ERROR = 'communication failure',
 778              ABORT_CODE = -1,
 779              ABORT_ERROR = 'transaction aborted',
 780              obj = {};
 781  
 782          obj.tId = tId;
 783          if(isAbort){
 784              obj.status = ABORT_CODE;
 785              obj.statusText = ABORT_ERROR;
 786          }
 787          else{
 788              obj.status = COMM_CODE;
 789              obj.statusText = COMM_ERROR;
 790          }
 791  
 792          if(callbackArg){
 793              obj.argument = callbackArg;
 794          }
 795  
 796          return obj;
 797      },
 798  
 799    /**
 800     * @description Method that initializes the custom HTTP headers for the each transaction.
 801     * @method initHeader
 802     * @public
 803     * @static
 804     * @param {string} label The HTTP header label
 805     * @param {string} value The HTTP header value
 806     * @param {string} isDefault Determines if the specific header is a default header
 807     * automatically sent with each transaction.
 808     * @return {void}
 809     */
 810      initHeader:function(label, value, isDefault)
 811      {
 812          var headerObj = (isDefault)?this._default_headers:this._http_headers;
 813  
 814          headerObj[label] = value;
 815          if(isDefault){
 816              this._has_default_headers = true;
 817          }
 818          else{
 819              this._has_http_headers = true;
 820          }
 821      },
 822  
 823  
 824    /**
 825     * @description Accessor that sets the HTTP headers for each transaction.
 826     * @method setHeader
 827     * @private
 828     * @static
 829     * @param {object} o The connection object for the transaction.
 830     * @return {void}
 831     */
 832      setHeader:function(o)
 833      {
 834          var prop;
 835          if(this._has_default_headers){
 836              for(prop in this._default_headers){
 837                  if(YAHOO.lang.hasOwnProperty(this._default_headers, prop)){
 838                      o.conn.setRequestHeader(prop, this._default_headers[prop]);
 839                      YAHOO.log('Default HTTP header ' + prop + ' set with value of ' + this._default_headers[prop], 'info', 'Connection');
 840                  }
 841              }
 842          }
 843  
 844          if(this._has_http_headers){
 845              for(prop in this._http_headers){
 846                  if(YAHOO.lang.hasOwnProperty(this._http_headers, prop)){
 847                      o.conn.setRequestHeader(prop, this._http_headers[prop]);
 848                      YAHOO.log('HTTP header ' + prop + ' set with value of ' + this._http_headers[prop], 'info', 'Connection');
 849                  }
 850              }
 851  
 852              this._http_headers = {};
 853              this._has_http_headers = false;
 854          }
 855      },
 856  
 857    /**
 858     * @description Resets the default HTTP headers object
 859     * @method resetDefaultHeaders
 860     * @public
 861     * @static
 862     * @return {void}
 863     */
 864      resetDefaultHeaders:function(){
 865          this._default_headers = {};
 866          this._has_default_headers = false;
 867      },
 868  
 869    /**
 870     * @description Method to terminate a transaction, if it has not reached readyState 4.
 871     * @method abort
 872     * @public
 873     * @static
 874     * @param {object} o The connection object returned by asyncRequest.
 875     * @param {object} callback  User-defined callback object.
 876     * @param {string} isTimeout boolean to indicate if abort resulted from a callback timeout.
 877     * @return {boolean}
 878     */
 879      abort:function(o, callback, isTimeout)
 880      {
 881          var abortStatus,
 882              args = (callback && callback.argument)?callback.argument:null;
 883              o = o || {};
 884  
 885          if(o.conn){
 886              if(o.xhr){
 887                  if(this.isCallInProgress(o)){
 888                      // Issue abort request
 889                      o.conn.abort();
 890  
 891                      window.clearInterval(this._poll[o.tId]);
 892                      delete this._poll[o.tId];
 893  
 894                      if(isTimeout){
 895                          window.clearTimeout(this._timeOut[o.tId]);
 896                          delete this._timeOut[o.tId];
 897                      }
 898  
 899                      abortStatus = true;
 900                  }
 901              }
 902              else if(o.xdr){
 903                  o.conn.abort(o.tId);
 904                  abortStatus = true;
 905              }
 906          }
 907          else if(o.upload){
 908              var frameId = 'yuiIO' + o.tId;
 909              var io = document.getElementById(frameId);
 910  
 911              if(io){
 912                  // Remove all listeners on the iframe prior to
 913                  // its destruction.
 914                  YAHOO.util.Event.removeListener(io, "load");
 915                  // Destroy the iframe facilitating the transaction.
 916                  document.body.removeChild(io);
 917                  YAHOO.log('File upload iframe destroyed. Id is:' + frameId, 'info', 'Connection');
 918  
 919                  if(isTimeout){
 920                      window.clearTimeout(this._timeOut[o.tId]);
 921                      delete this._timeOut[o.tId];
 922                  }
 923  
 924                  abortStatus = true;
 925              }
 926          }
 927          else{
 928              abortStatus = false;
 929          }
 930  
 931          if(abortStatus === true){
 932              // Fire global custom event -- abortEvent
 933              this.abortEvent.fire(o, args);
 934  
 935              if(o.abortEvent){
 936                  // Fire transaction custom event -- abortEvent
 937                  o.abortEvent.fire(o, args);
 938              }
 939  
 940              this.handleTransactionResponse(o, callback, true);
 941              YAHOO.log('Transaction ' + o.tId + ' aborted.', 'info', 'Connection');
 942          }
 943  
 944          return abortStatus;
 945      },
 946  
 947    /**
 948     * @description Determines if the transaction is still being processed.
 949     * @method isCallInProgress
 950     * @public
 951     * @static
 952     * @param {object} o The connection object returned by asyncRequest
 953     * @return {boolean}
 954     */
 955      isCallInProgress:function(o)
 956      {
 957          o = o || {};
 958          // if the XHR object assigned to the transaction has not been dereferenced,
 959          // then check its readyState status.  Otherwise, return false.
 960          if(o.xhr && o.conn){
 961              return o.conn.readyState !== 4 && o.conn.readyState !== 0;
 962          }
 963          else if(o.xdr && o.conn){
 964              return o.conn.isCallInProgress(o.tId);
 965          }
 966          else if(o.upload === true){
 967              return document.getElementById('yuiIO' + o.tId)?true:false;
 968          }
 969          else{
 970              return false;
 971          }
 972      },
 973  
 974    /**
 975     * @description Dereference the XHR instance and the connection object after the transaction is completed.
 976     * @method releaseObject
 977     * @private
 978     * @static
 979     * @param {object} o The connection object
 980     * @return {void}
 981     */
 982      releaseObject:function(o)
 983      {
 984          if(o && o.conn){
 985              //dereference the XHR instance.
 986              o.conn = null;
 987  
 988              YAHOO.log('Connection object for transaction ' + o.tId + ' destroyed.', 'info', 'Connection');
 989  
 990              //dereference the connection object.
 991              o = null;
 992          }
 993      }
 994  };
 995  
 996  YAHOO.register("connection_core", YAHOO.util.Connect, {version: "2.9.0", build: "2800"});
 997  
 998  }, '2.9.0' ,{"requires": ["yui2-yahoo", "yui2-event"]});


Generated: Thu Aug 11 10:00:09 2016 Cross-referenced by PHPXref 0.7.1