﻿/* Ajax应用必须用到的对象ContentLoader */

var ajax = new Object(); // 名字空间
ajax.READY_STATE_UNINITALIZED = 0;
ajax.READY_STATE_LOADING = 1;
ajax.READY_STATE_LOADED = 2;
ajax.READY_STATE_INTERACTIVE = 3;
ajax.READY_STATE_COMPLETE = 4;

/* ContentLoader对象的构造函数

参数说明：
component：ajax提供服务的对象，它应该有一个ajaxUpdate()方法和一个handleError()方法
url：请求页面的地址（可以是相对地址）
reqparams：请求传递的参数字符串
method：请求的发送方式（post/get）
syncway：Ajax同步/异步方式（true为异步；false为同步）

*/
ajax.ContentLoader = function(component, url, reqparams, method, syncway)
{
  this.component = component;
  this.url = url;
  this.reqparams = reqparams;    
  this.method = (method.toLowerCase() == "get") ? "GET" : "POST";
  this.syncway = (syncway) ? true : false;
//  this.onError = (this.component.handleError) ? this.component.handleError : this.defaultError;
}

ajax.ContentLoader.prototype = {
  createTransport: function()
  {
    var transport;
    
    if(window.XMLHttpRequest) transport = new XMLHttpRequest();
    else if (window.ActiveXObject)
    {
      try
      {
        transport = new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch(err)
      {
        transport = new ActiveXObject("Microsoft.XMLHTTP");
      }
    }
    
    return transport;
  },
  
  sendRequest: function()
  {    
    var request = this.createTransport();
    request.open(this.method, this.url, this.syncway);        
    request.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); // 采用Post方法时须写
//  request.setRequestHeader("Pragma","no-cache");
//	request.setRequestHeader("Cache-Control","no-cache");
//	request.setRequestHeader("Expires","0"); 
    var othis = this;
    request.onreadystatechange = function()
    {      
      othis.handleAjaxResponse(request);
    };
    if(this.reqparams == "") this.reqparams = " ";    
    request.send(this.reqparams);   
  },
    
  handleAjaxResponse: function(request)
  {    
    if(request.readyState == ajax.READY_STATE_COMPLETE)
    {
      if(this.isSuccess(request)) this.component.ajaxUpdate(request);
      else 
      {
        if(this.component.handleError) this.component.handleError(request);
        else this.defaultError(request);
      }
    }
  },
  
  isSuccess: function(request)
  {
    return request.status == 0
      || (request.status >= 200 && request.status < 300);
  },
  
  defaultError:function(request)
  {
    window.alert("取数据出错！"
      + "\n\n准备状态：" + request.readyState
      + "\n状态：" + request.status
      + "\nHttp头部：" + request.getAllResponseHeaders());
  }
}