以下内容均为个人学习过程的总结记录,如有错误,望各位大佬指正~


是什么

Asynchronous JavaScript And XML,异步JS和XML:在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术(在等待服务器响应时执行其他脚本,当响应就绪后对响应进行处理)

为什么用

优点

  • 异步模式,提升用户体验
  • 优化浏览器及服务器之间的传输,减少不必要的数据往返,减少带宽占用
  • AJax引擎在客户端运行,承担了部分本来由服务器承担的工作,从而减少大用户量下的服务器负载

缺点

  • 不支持浏览器back按钮
  • 安全问题:暴露了与服务器交互的细节
  • 对搜索引擎的支持比较弱
  • 破坏了程序的异常机制
  • 不易调试

如何用(原生)

  • 内容改变
  • 某异步函数被调用

1、AJAX XHR

XMLHttpRequest对象:用于后台与服务器交换数据,使之可用JS向服务器发起请求并处理响应而不阻塞用户,进行页面的局部更新

创建XHR对象

var xmlhttp;
if (window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();
}
else{xmlhttp = new ActiveObject('Microsoft.XMLHTTP')
}

2、向服务器发送请求

xmlhttp.open('GET', 'test1.txt', true);
// true表示异步,请求类型为get,文件在服务器上的位置为test1.txt
xmlhttp.send();
//send(string)仅用于post请求

请求方式的选择

使用post的情况

可设置请求头,规定请求数据类型,比get更安全传输文件体积无限制;常用于上传数据

  • 无法使用缓存文件(更新服务器上的文件或数据)
  • 向服务器发送大量数据(post没有限制)
  • 发送包含未知字符的用户输入,post比get更稳定也更可靠
  • 像表单一样post数据:使用setRequestHeader()来添加HTTP头,然后在send方法中发送数据(请求体)
    xmlhttp.open('post', 'ajax_test.asp', 'true');
    xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    xmlhttp.send('fname=Bill&name=Gates');

使用get

通过URL传递参数,相对不安全,但传输速度;传输文件小;常用于获取数据

  • 为避免得到缓存的结果,可向URL中添加一个唯一的ID
    xmlhttp.open('get', 'demo_get.asp?t=' + Math.random(), true);
    xmlhttp.send();
  • 通过get方法发送信息,可向URL添加信息
    xmlhttp.open('get', 'demo_get2.asp?fname=Bill&name=Gates', true);
    xmlhttp.send();

使用delete

使用put

3、服务器响应

获取来自服务器的响应:使用XHR对象的responseText或responseXML属性

  • responseTest:字符串响应
  • responseXML:XML响应

4、响应就绪,执行函数

onreadystatechange事件

每当readyState改变时,就会触发onreadystatechange事件。onreadystatechange储存函数,每当readyState属性改变时调用;readyState储存XHR的状态;

  • 0:请求未初始化
  • 1:请求连接已建立
  • 2:请求已接受
  • 3:请求处理中
  • 4:请求已完成,响应就绪

status

  • 200:OK
  • 404:未找到页面

status:HTTP状态码

  • 1xx(临时响应):表示临时响应并需要请求者继续执行操作
  • 2xx(成功):表示成果处理了请求
  • 3xx(重定向):表示要完成请求需要进一步操作,通常用于重定向
  • 4xx(请求错误):表示可能出错,妨碍了服务器的处理
  • 5xx(服务器错误):表示服务器在尝试处理请求时发生内部错误,这些错误可能是服务器本身的错误,而不是请求出错

响应就绪

当async=true时,应在响应处于onreadystatechange事件中的就绪状态时执行函数

xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState == 4 && xmlhttp.status == 200){documemt.getElementById('myDiv').innerHTML = xmlhttp.respenseText;}
}
xmlhttp.open('get', 'test1.txt', true);
xmlhttp.send();
​

当async=false时(同地),JS会等到服务器响应完毕再继续执行,若服务器繁忙或缓慢,应用程序会挂起或停止(此时无需编写onreadystatechange函数)

xmlhttp.open("GET","test1.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

封装

function ajax(url, fnSucc, fnFail){var xmlhttp;if(window.XMLHttpRequest){xmlhttp = new XMLHttpRequest();}else{xmlhttp = new ActiveObject('Microsoft.XMLHTP');}xmlhttp.onreadystatechange = function(){if(xmlhttp.readyState == 4 && xmlhttp.status == 200){fnSucc(xmlhttp.responseText)}else{if(fnFail){fnFail(xmlhttp.responseText)}}}xmlhttp.open('GET', url)xmlhttp.send()
}

ajax请求出错_学习笔记:Ajax总结相关推荐

  1. mvc中ajax的跳转,springmvc ajax 跳转的学习笔记

    Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,下面我们来看一篇关于springmvc ajax 跳转 ...

  2. ajax请求提示html状态码302,快速解决ajax请求出错状态码为0的问题

    今天在使用 ajax 向后台请求数据时出现错误,提示状态码为 0 ,后台采用的是 spring mvc 架构. 状态码为0是什么意思呢?查找了下,原来它意味着 (未初始化)即没有调用到send()方法 ...

  3. DHCP服务_学习笔记

    DHCP服务_学习笔记 DHCP(Dynamic Host Configuration Protocol):动态主机配置协议 Lease:租约    续租时间需要是租期时间的一半 UDP协议: Ser ...

  4. 友盟统计+渠道包_学习笔记

    友盟统计+渠道包_学习笔记 资料: 官网:https://developer.umeng.com/docs/66632/detail/66889#h3-u5E38u89C1u95EEu9898 视频资 ...

  5. html ajax请求怎么用,如何使用ajax,ajax请求的五个步骤

    有很多童鞋,在WEB前端面试的时候,常会被Ajax问题难住,其实Ajax没有你们理解的那么难,现在源码时代H5学科讲师带着大家重新来回顾一下知识点:随便再给大家普及一下小常识,今天咱们聊的就是怎么快速 ...

  6. jQuery ajax请求两次问题,jquery ajax请求了两次问题

    页面有一个请求form: 订单编号 用户帐户 发货状态 请选择 未发送 已发送 查询 JavaScript请求部分: function showdatalist() { var username = ...

  7. db4o_8.0对象数据库官方文档翻译_学习笔记三

    紧接上篇:db4o_8.0对象数据库官方文档翻译_学习笔记二 3. Object Manager Enterprise Overview(OME视图)即OME插件的使用 If you did not  ...

  8. 韩顺平php可爱屋源码_韩顺平_php从入门到精通_视频教程_第20讲_仿sohu主页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理...

    韩顺平_php从入门到精通_视频教程_第20讲_仿sohu首页面布局_可爱屋首页面_学习笔记_源代码图解_PPT文档整理 对sohu页面的分析 注释很重要 经验:写一点,测试一点,这是一个很好的方法. ...

  9. 图论01.最短路专题_学习笔记+模板

    图论01.最短路专题_学习笔记+模板 一.定义与性质 ● 需要的前导知识点 路径 最短路 有向图中的最短路.无向图中的最短路 单源最短路.每对结点之间的最短路 ● 最短路的性质 对于边权为正的图,任意 ...

最新文章

  1. 2016百度实习编程题:括号序列
  2. 一步步写一个符合Promise/A+规范的库 1
  3. MySQL数据库备份和还原的常用命令小结
  4. H264 Profile对比分析
  5. 在python中len表示的数据类型是_python基本数据类型学习
  6. WPF中的触发器(Trigger)
  7. LwIP之网络接口管理
  8. html5移动开发入门知识
  9. AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
  10. java中static类的作用是什么意思_java中static关键字是什么意思
  11. wav格式怎么转换成flac?
  12. 软件测试之因果图法(P24——P26)
  13. Unity,C#版的动画曲线,Tween:EaseIn,EaseOut,EaseInOut(编程语言翻译版本)
  14. with dlz mysql 条件_BIND+DLZ+MYSQL
  15. 【小知识】TVS瞬态抑制二极管与齐纳二极管(稳压管)的差异点分析
  16. 15.JavaScript——34——JavaScript高级
  17. Amazon RDS介绍 (一)
  18. 英飞凌硅麦焊接注意事项
  19. AForge “未能加载文件或程序集“AForge.Video.FFMPEG.dll”或它的某一个依赖项。找不到指定的模块”
  20. Android 解压 Zip 压缩文件

热门文章

  1. flex右对齐_移动WEB开发 — Flex布局
  2. mysql 组复制 不一致_MySQL主从复制什么原因会造成不一致,如何预防及解决
  3. win10电脑黑屏只有鼠标箭头_电脑开机就黑屏,只显示鼠标怎么办?别急,简单几步,轻松解决!...
  4. 中职计算机专业第二单元试题,大学计算机Moodle第二单元测验满分答案
  5. java 标识变量_Java变量与数据类型之一:Java编程规范,关键字与标识符
  6. 分类问题的评价及matrix , precision, recall
  7. SuperSocket架构设计示意图【转】
  8. 如何使用CHM 绕过Device guard
  9. Service通信详解
  10. 如何让一个用户拥有root权限