AJAX编程-封装ajax工具函数

即 Asynchronous [e'sɪŋkrənəs] Javascript And XML,AJAX 不是一门的新的语言,而是对现有技术的综合利用。
本质是在HTTP协议的基础上以异步的方式与服务器进行通信。

XMLHttpRequest可以以异步方式的处理程序,浏览器内建对象,用于在后台与服务器通信(交换数据) ,由此我们便可实现对网页的部分更新,而不是刷新整个页面。

封装ajax工具函数

$.ajax = function(options){

   if(!options) return false;

  /*options 参数传递*/
  var type = options.type || 'get';
  var url = options.url || location.pathname;
  var async = options.async === false ? false : true;
  var data = options.data || {};

/*data 选要转化成 name=xjj&age=10*/
  var dataStr = '';
  for(var key in data){
  //console.log(data[key]);
  dataStr += key+'='+data[key]+'&';
  }

/*如果就数据 就裁剪掉最后一个&*/
  dataStr = dataStr && dataStr.slice(0,-1);


  /*ajax 编程*/
  /*初始化*/
  var xhr = new XMLHttpRequest();

  /*请求行*/
  /*如果是get请求那么就要拼接数据在url后面 ?*/
  xhr.open(type,type == 'get'?url+'?'+dataStr:url,async);

  /*请求头*/
  /*如果是post请求需要设置 content-type application/x-www-form-urlencoded*/
  if(type == 'post'){
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  }

  options.beforeSend && options.beforeSend();

  /*请求主体*/
  /*如果是post请求需要把数据字符传过去 否则是null*/
  xhr.send(type=='get'?null:dataStr);

  /*监听响应状态的改变*/
  xhr.onreadystatechange = function(){
  /*响应成功*/
  if(xhr.readyState == 4){
    if( xhr.status == 200){
    /*处理响应成功函数*/
      var result = '';
      /*接受数据*/
      /* json xml string*/
      var contentType = xhr.getResponseHeader('Content-Type');

      if(contentType.indexOf('xml') > -1){
      /*服务端返回的是xml数据格式*/
        result = xhr.responseXML;
       }else if(contentType.indexOf('json') > -1){
        /*服务端返回的是json数据格式*/
        /*json字符串*/
        var str = xhr.responseText;
        result = JSON.parse(str);
       }else{
      result = xhr.responseText;
      }

    /*调用回调函数*/
      options.success && options.success(result);
    }
  /*响应失败*/
  else{
    /*处理响应失败函数*/
  options.error && options.error('request fail code' + xhr.status);
    }

  options.complete && options.complete();
  }
 }
};



posted @ 2016-07-25 00:01  贵欢lucky  阅读(265)  评论(0编辑  收藏  举报