• js中FormData+XMLHttpRequest数据传输


    前言:

    首先我们需要了解,前后端进行数据传输依赖于浏览器的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 对象

    IE5IE6使用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")

  • 相关阅读:
    CListCtrl基本用法
    学习c++:获得函数私有变量
    vc 学习笔记 之工程
    怎样用c/c++编程连接mysql数据库?
    几天的总结,CEdit,CListctl.......
    c++ const成员函数
    PreparedStatement是如何大幅度提高性能的 (转)
    __declspec(dllexport)与.def文件
    让我懂得 多态性 的网友的帖子
    解读工程 之困惑之处
  • 原文地址:https://www.cnblogs.com/nana-share/p/4904506.html
Copyright © 2020-2023  润新知