封装ajax原理

  1. 首先处理 用户如果不传某些参数,设置默认值

    • type默认get
    • 默认url为当前页
    • 默认async方式请求
    • data数据默认为{}
  2. 处理用户传进来的参数对象
    • 遍历,拼接成key=value&key=value形式,加入数组
  3. 通过XMLHttpRequest对象创建xhr,早期的IE浏览器不支持XMLHttpRequest对象,通过var xhr = new ActiveXObject('Msxm12.XMLHTTP')创建
  4. 判断用户请求的方法
    • get:将数据拼接在url后面,
    • post:需要加一个请求头,并且用send方法传递数据
  5. 判断数据是否请求成功
    • xhr.readyState == 4 && xhr.status == 200表示请求成功
  6. 根据服务器端返回的数据类型进行加工,再用callback传递出去
    • 如果返回的是json格式的数据,就转换成js对象json.parse
    • 如果是xml格式,就将DOM文档对象返回
    • 将处理好的数据用callback传递出去
  7. 优化!!!
    • 将用户需要传入的参数挂载到options对象上,用户只需要传入一个对象就可以使用了
  1. function ajax(options){
  2. //默认值的处理,用户不传某些参数的时候,设置一些默认值
  3. //设置type的默认值为get
  4. options.type = options.type || "get";
  5. //设置请求地址的默认值为当前页地址
  6. options.url = options.url || location.href;
  7. // //设置async的默认值
  8. options.async = options.async || "true";
  9. //设置options.data的默认值
  10. options.data = options.data || {};
  11.  
  12. //处理用户传进来的请求参数(data)对象
  13. //{key: "123", age: 1, gender: "male"}
  14. //key=123&age=1&gender=male
  15. var dataArr = [];
  16. for(var k in options.data){
  17. dataArr.push(k + "=" + options.data[k]);
  18. }
  19. var dataStr = dataArr.join("&");
  20.  
  21. var xhr = new XMLHttpRequest();
  22. xhr.open(options.type, options.type == "get"? options.url + "?" + dataStr : options.url, options.async);
  23.  
  24. if(options.type == "post"){
  25. xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  26. }
  27. xhr.send(options.type == "get"? null : dataStr);
  28.  
  29. if(options.async){
  30. xhr.onreadystatechange = function(){
  31. if(xhr.readyState == 4 && xhr.status == 200){
  32. var type = xhr.getResponseHeader("Content-Type");
  33. var result;
  34. if(type.indexOf("json") != -1){
  35. result = JSON.parse(xhr.responseText);
  36. }else if(type.indexOf("xml") != -1){
  37. result = xhr.responseXML;
  38. }else{
  39. result = xhr.responseText;
  40. }
  41. options.success(result);
  42. }
  43. }
  44. }else{
  45. var type = xhr.getResponseHeader("Content-Type");
  46. var result;
  47. if(type.indexOf("json") != -1){
  48. result = JSON.parse(xhr.responseText);
  49. }else if(type.indexOf("xml") != -1){
  50. result = xhr.responseXML;
  51. }else{
  52. result = xhr.responseText;
  53. }
  54. options.success(result);
  55. }
  56. }
  57.  
  58. function get(options){
  59. options.type = "get";
  60. ajax(options);
  61. }
  62.  
  63. function post(options){
  64. options.type = "post";
  65. ajax(options);
  66. }
  67.  
  68. // ajax({
  69. // url: "json.php",
  70. // data: {key: "123", age: 1, gender: "male"},
  71. // success: function(data){
  72. // console.log(data);
  73. // }
  74. // });
  75.  
  76. get({
  77. url: "json.php",
  78. success: function(data){
  79. console.log(data);
  80. }
  81. })
  82.  
  83. // ajax({
  84. // url: "xml.php",
  85. // type: "get",
  86. // data: {key: "123", age: 1, gender: "male"},
  87. // success: function(data){
  88. // console.log(data);
  89. // }
  90. // });

  

封装ajax原理的更多相关文章

  1. js实现原生Ajax的封装及ajax原理详解

    原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...

  2. Ajax原理,技术封装与完整示例代码

    在做项目和学习的时候,经常用到Ajax的相关技术,但是这方面的技术总是运用的不是十分好,就寻找相关博客来学习加深Ajax技术相关. 一.Ajax简介 二.同步.异步传输区别 2.1 异步传输 2.2 ...

  3. Ajax原理一篇就够了

    Ajax原理一篇就够了 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简 ...

  4. 大话AJAX原理

    大话AJAX原理 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简单地说 ...

  5. 自封装ajax

    项目中有时候用不到jq,需要了解xmlhttp原理,自己写一套函数请求和发送数据! /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET ...

  6. 封装Ajax和跨域

    目录 引言 封装ajax 案例:使用自封装ajax 案例:动态加载瀑布流 跨域 引言 对于Ajax现在相信大家已经不会陌生了,无论是原生的XMLHttpRequest方式发送还是通过jQuery框架中 ...

  7. 一张图搞懂Ajax原理

    本文整理在,我的github上.欢迎Star. 原理 说起ajax,就不得不说他背后的核心对象XMLHttpRequest,而说到XMLHttpRequest我觉得,从它的readyState状态说起 ...

  8. AJAX原理总结

    AJAX全称 Asynchronous JavaScript and XML(异步的JavaScript 和XML) 同步和异步 异步传输是面向字符的传输,单位是字符 同步传输是面向比特,单位是帧,传 ...

  9. 使用原生JS封装Ajax

    使用原生 的JS封装 Ajax,实现 仿JQuery的Ajax,post,get三种异步请求方式: var MAjax = { //根据浏览器创建异步对象 createXhr: function () ...

随机推荐

  1. # 20175333曹雅坤《Java程序设计》第五周学习总结

    教材学习内容总结 第六章要点: 1.接口:1)接口声明: interface //接口的名字 2)接口体 2.实现接口:类实现接口:一个类需要在类声明中使用关键字implements声明该类实现一个或 ...

  2. Appnium-API-Session

    Session Create New Session Java: DesiredCapabilities desiredCapabilities = new DesiredCapabilities() ...

  3. 使用chrome开发者工具中的performance面板解决性能瓶颈

    前面的话 使用Chrome DevTools的performance面板可以记录和分析页面在运行时的所有活动.本文将详细介绍如何使用performance面板解决性能瓶颈 准备 [匿名模式] 匿名模式 ...

  4. 【easy-】437. Path Sum III 二叉树任意起始区间和

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...

  5. ZOJ1008

    题目: ZOJ 1008 分析: 重排矩阵, 虽然题目给的时间很多, 但是要注意剪枝, 把相同的矩阵标记, 在搜索时可以起到剪枝效果. Code: #include <bits/stdc++.h ...

  6. JS 冷知识,运行机制

    数组取最小.最大值 var a=[1,2,3,5]; alert(Math.max.apply(null, a));//最大值 alert(Math.min.apply(null, a));//最小值 ...

  7. 【java】字节码操作技术

    asm.javassist.cglib. 1.asm 比较底层,使用的visitor设计模式. 官网:https://asm.ow2.io/ 2.javassist 官网:http://www.jav ...

  8. linux 相关( 随时更新)

    Linux笔记: 本地文件传到服务器上: scp -P8022 /文件路径 niehaidong@101.201.75.57:/tmp/ 从服务器上到本地 scp -P8022  niehaidong ...

  9. 拦截请求并记录相应信息-springboot

    方式: 1.FIlter过滤器 2.interceptor拦截器 3.Aspect切片 一.Filter过滤器形式 只能处理request中的数据  不能确定请求要走的是哪个controller信息 ...

  10. linux extglob模式 和rm反选

    前言 extglob模式开启之后Shell可以另外识别出5个模式匹配操作符,能使文件匹配更加方便. 不然不识别! 正文 #开启命令: shopt -s extglob #关闭命令: shopt -u ...