前言:

首先我们需要了解,前后端进行数据传输依赖于浏览器的XMLHttpRequest对象

一、什么是XMLHttpRequest对象?

XMLHttpRequest 是DOM对象,提供了对于http(s)的完全访问,包括POST和HEAD请求,以及普通的GET请求能力。可以同步或异步的返回web服务器的响应,并且能够以文本或DOM文档的方式返回内容。
尽管名为 XMLHttpRequest,它并不限于和 XML 文档一起使用:它可以接收任何形式的文本文档。

二、浏览器支持

所有浏览器均支持XMLHttpRequest对象
区别在于创建XMLHttpRequest对象时,在 IE 5 和 IE 6 中,必须使用特定于 IE 的 ActiveXObject() 构造函数。

三、XMLHttpRequest 对象属性

1、readyState

HTTP 请求的状态.当一个 XMLHttpRequest 初次创建时,这个属性的值从 0 开始,直到接收到完整的 HTTP 响应,这个值增加到 4。
5 个状态中每一个都有一个相关联的非正式的名称,下表列出了状态、名称和含义:

状态 名称 描述
0 Uninitialized 初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
1 Open open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。
3 Receiving 所有响应头部都已经接收到。响应体开始接收但未完成。
4 Loaded HTTP 响应已经完全接收。

readyState 的值不会递减,除非当一个请求在处理过程中的时候调用了 abort() 或 open() 方法。每次这个属性的值增加的时候,都会触发 onreadystatechange 事件句柄。

2、responseText

目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。
如果 readyState 小于 3,这个属性就是一个空字符串。
当 readyState 为 3,这个属性返回目前已经接收的响应部分。
如果 readyState 为 4,这个属性保存了完整的响应体。
如果响应包含了为响应体指定字符编码的头部,就使用该编码。否则,假定使用 Unicode UTF-8。

3、responseXML

对请求的响应,解析为 XML 并作为 Document 对象返回。

4、status

由服务器返回的 HTTP 状态代码,如 200 表示成功,而 404 表示 "Not Found" 错误。当 readyState 小于 3 的时候读取这一属性会导致一个异常。

5、statusText

这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。也就是说,当状态为 200 的时候它是 "OK",当状态为 404 的时候它是 "Not Found"。和 status 属性一样,当 readyState 小于 3 的时候读取这一属性会导致一个异常。

更多XMLHttpRequest 知识详见http://www.w3school.com.cn/xmldom/dom_http.asp

三、创建XMLHttpRequest 对象

IE5\IE6使用ActiveX 对象
xmlhttp = new ActiveXObject(" Microsoft.XMLHTTP");
现代浏览器
现代浏览器都有内置XMLHttpRequest对象
xmlhttp=new XMLHttpRequest();

四、使用FormData 模拟表单提交

IE10以下浏览器不支持FormData FormData 最大的优势是可以上传二进制文件

1、提交表单时

把form表单作为参数传给FormData 构造函数,这样就可以直接通过ajax 的 send() 方法将 fd 发送到后台。
var form = document.getElementById("form1");
var fd = new FormData(form);
其中,FormData 对象 会把表单中name,value组合成queryString 提交给后台

2、模拟表单提交

使用FormData 方法 append向fd添加键值对,另外还有set ()方法,delete()方法 get()、getAll()、has()、keys()、value()
var fd = new FormData();
fd.append("key","value")

js中FormData+XMLHttpRequest数据传输的更多相关文章

  1. js中的XMLHTTPRequest

    window.onload = function(){ //var url = "http://localhost:8000/sales.json"; var url = &quo ...

  2. js中formData的使用

    FormData 对象的使用 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData/Using_FormData_Objects http ...

  3. 部分安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法

    前端JS中使用XMLHttpRequest 2上传图片到服务器,PC端和大部分手机上都正常,但在少部分安卓手机上上传失败,服务器上查看图片,显示字节数为0.下面是上传图片的核心代码: HTML < ...

  4. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  5. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  6. js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  7. [转]js中几种实用的跨域方法原理详解

    转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...

  8. js中几种实用的跨域方法原理详解【转】

    源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...

  9. JS中的跨域问题

    一.什么是跨域? 1.定义:跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.但是一般情况下不能这么做,它是由浏览器的 ...

随机推荐

  1. 系统更新后vs2012无法打开方案资源管理器

    系统更新后vs2012无法打开方案资源管理器 vs调试报错: 未找到与约束 ContractName Microsoft.VisualStudio.Language.Intellisense.IGly ...

  2. 图片小精灵 & 解决同时给一个元素设置背景问题 &jq登录注册切换

    图片小精灵,当有整张图片时可以通过图片小精灵设置图标. 例如 <!DOCTYPE html> <html> <head> <meta charset=&quo ...

  3. ref关键字的用法

    ref 关键字通过引用(而非值)传递参数. 通过引用传递的效果是,对所调用方法中的参数进行的任何更改都反映在调用方法中. 例如,如果调用方传递本地变量表达式或数组元素访问表达式,所调用方法会将对象替换 ...

  4. javascript实现数据结构: 树和二叉树,二叉树的遍历和基本操作

    树型结构是一类非常重要的非线性结构.直观地,树型结构是以分支关系定义的层次结构. 树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构:在数据库系统中,可用树来组织信息:在分 ...

  5. Javascript 自定义输出

    缘由 前段时间再看了一些javascript的学习资料,也写的一些demo,在输出的时候一般都用alert,但这个方法会打断函数运行,用起来不是很好.还有就是console.log这个方法,这种方法原 ...

  6. 今日头条极速版邀请码以及其它APP邀请码大全

    现在大多手机新闻APP都需要输入码,在网上找了很久,最终找到一个比较全的文章,本人试过,都是可以使用的! 第1个比较好,可边看新闻,边收益!嘻嘻!平时写代码累了,休息刷一下!或者在睡觉前刷新一下,每天 ...

  7. php基础--取默认值以及类的继承

    (1)对于php的默认值的使用和C++有点类似,都是在函数的输入中填写默认值,以下是php方法中对于默认值的应用: <?phpfunction makecoffee($types = array ...

  8. linux账号权限管理

    作为一名管理服务器的程序,最近,明显感到各种linux的账号和权限问题弄得很混乱.所以,接下来要学习一下这块内容. /etc/passwd 这个文件每一行代表一个账号,有几行代表系统中有几个账号.很多 ...

  9. Android layout 布局 属性详解

    第一类:属性值 true或者 false           android:layout_centerHrizontal 水平居中     android:layout_centerVertical ...

  10. App后台开发架构实践笔记

    1 App后台入门 1.1 App后台的功能 (1)远程存储数据: (2)消息中转. 1.2 App后台架构 架构设计的流程 (1) 根据App的设计,梳理出App的业务流程: (2) 把每个业务流程 ...