博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AJAX编程-封装ajax工具函数
阅读量:7211 次
发布时间:2019-06-29

本文共 1993 字,大约阅读时间需要 6 分钟。

即 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();

  }
 }
};

转载于:https://www.cnblogs.com/ghlucky/p/5702058.html

你可能感兴趣的文章
VC++ 使用CreateProcess创建新进程
查看>>
百度贴吧高考作文强贴
查看>>
管理 windows server 2003 的远程连接
查看>>
Apache+PHP 无法加载 MySql 模块的问题
查看>>
Leetcode: Design Hit Counter
查看>>
WPF中路由事件的传播
查看>>
ConfirmCancelUtilDialog【确认取消对话框封装类】
查看>>
FrameBuffer编程二(简单的程序上)
查看>>
Android应用开发实例篇(1)-----简易涂鸦板
查看>>
HUT-1694 零用钱 贪心
查看>>
ERP框架开发中的License许可验证机制设计与实现 (包含源代码下载)
查看>>
Log4j2使用总结
查看>>
Hibernate级联操作 注解
查看>>
三、主流区块链技术特点及Hyperledger Fabric V1.0版本特点
查看>>
android 跨进程点击方式总结
查看>>
小隐隐于野:基于TCP反射DDoS攻击分析
查看>>
一种避免 iOS 内存碎片的方法
查看>>
hook NSArray 方法在debug模式下会崩溃, 在release模式下会返回nil
查看>>
用Canvas创造一个太阳系
查看>>
Kotlin基础六
查看>>