记得有次面试的时候面试官问我知道AJAX吗?当时我回答听过但是没去看过,当时只是知道它和异步的概念有关。

经过查资料,弄明白了些头绪,下面就把我自己对AJAX的理解说说。

大多数浏览器是支持XMLHttprequest这个对象的,但是ie例外(查阅资料说5、6版本不支持),

所以为了兼容性,代码应该写成这样:

1.创建对象

var xhr;

if(window.XMLHttpRequest){

//大多数浏览器

xhr=new XMLHttpRequest();

}

if(window.ActiveXObject)

{

//ie 5  6

xhr=ActiveXObject("Miscrosoft.XMLHTTP");

}

这样就构建好了所需对象。

2.设置

get请求

xhr.open("get","/async.aspx",true);//设置请求行

xhr.send(null);//设置请求主体

xhr.onreadystatechange=function(){

if(xhr.status==200&&xhr.readyState){

//其他事务..

}

}

//其他事务..

post请求

xhr.open("post","/async.aspx",true);//设置请求行

xhr.setRequestHeader("Content-Type","application/x-www/form-urlencoded");//设置请求头

xhr.send("user=123&pwd=123");//设置请求主体

xhr.onreadystatechange=function(){

if(xhr.status==200&&xhr.readyState){

//其他事务...

}

}

//其他事务...

其中请求行的最后一个参数true代表异步,false代表同步,默认是true。

true表示脚本会在send()方法后继续执行,而不等待服务器响应。

readyState表示一种状态,

0,UNSET open尚未调用

1,OPENED open已经调用

2,HEADERS_RECEIVED 接受到头信息

3,LOADING 接受到头主体

4,DONE 响应完成

3.补充

get请求是没有请求中体的,所以不用设置请求体里的Content-Type.

post是通过请求主体来传递参数的,所以设置的Content-Type,就是为了告诉服务器要怎么解析传去的数据。

get是通过请求地址传递参数的,例如:xhr.open("get","a.aspx?user=123&pwd=123",true);

4.JQuery

以为现在很多情况下都不直接使用javascript了,而是使用到它的封装.

JQuery里面对XMLHttpRequest进行了封装,进而有了$.post();$.ge();$.ajax()....等方法。

对于是如何封装的,由于本人还没看过,所以还不敢下断言。

所以本人理解并不是异步请求,而是不等待服务器响应。send在请求的时候还是按照代码的先后顺序执行。

关于XML异步的更多相关文章

  1. struts2实现XML异步交互

    异步交互,在不用重新提交整个页面的情况下可以实现页面局部信息与服务器的交互.在编写异步交互时需要用到一个架包:dom4j,下载地址为:https://dom4j.github.io/ 下面通过例子说明 ...

  2. 异步处理XML异步数据——以原生的JavaScript与jQuery中的$.ajax()为例

    此文档解决以下问题: 一.原生的JavaScript从服务器端输出XML格式数据 1.XMLHttpRequest对象的运用 XMLHttpRequest对象的open()方法 XMLHttpRequ ...

  3. XML异步请求实例

    其实还是很格式化的: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  4. ajax(Asynchronous JavaScript and XML) 异步js或者xml

    1.XMLHttpRequest 对象:向服务器发送局部的请求,异步获取执行 a.浏览器支持 b.语法: xmlhttp==new XMLHttpRequest(); xmlhttp.open(&qu ...

  5. Apache Commons Digester 二(规则模块绑定-RulesModule、异步解析-asyncParse、xml变量Substitutor、带参构造方法)

    前言 上一篇对Digester做了基本介绍,也已经了解了Digester的基本使用方法,接下来将继续学习其相关特性,本篇主要涉及以下几个内容: 规则模块绑定,通过定义一个RulesModule接口实现 ...

  6. ajax同步、异步执行简单理解与证明

    此理解范例代码来自前几篇随笔! 首先我们来先了解下AJAX: Ajax:全称“Asynchronous Javascript and XML”(异步Javascript和XML),他是由Javascr ...

  7. 【XML】 XML格式一些记录

    XML XML格式常用于网络通讯,本身不会有作为而是作为纯文本传输,可以说它是一种独立于应用和硬件的数据传输工具.虽然看起来XML比HTML要更加简单,也知道的更加晚一点,但是需要知道的是,XML才是 ...

  8. struts2实现jQuery的异步交互

    struts2中jQuery的异步交互有两种方式: 1)是利用构造字符串的方式来实现: 使用该方法主要是在服务器端根据前端的请求,返回一个字符串信息,然后前端的jQuery通过解析该字符串信息得到对应 ...

  9. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)

    一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...

随机推荐

  1. 小强的HTML5移动开发之路(32)—— JavaScript回顾7

    BOM模型brower object model(浏览器对象模型),通过浏览器内置的一些对象可以操作浏览器本身. DOM是用来操作页面的,BOM是用来操作浏览器本身的. BOM是没有规范的,但是大部分 ...

  2. 菜鸟学习Spring——60s利用JoinPoint获取參数的值和方法名称

    一.概述 AOP的实现方法在上两篇博客中已经用了两种方法来实现如今的问题来了尽管我们利用AOP,那么client怎样信息传递?利用JoinPoint接口来实现client给详细实现类的传递參数. 二. ...

  3. Unity3d 配置OpenCV(EmguCV) 周围环境

    最近毕业.我们一直在研究如何Unity正在使用EmguCV,最后,有些吃老本的今天. 我的环境:Unity3d 4.3.1f             libemgucv-windows-univers ...

  4. prettytensor 的使用

    prettytensor 顾名思义,对原始的 tensorflow 下的 tensor 进行封装(prettytensor 以 tensorflow 为基础,二者搭配使用),使其成为一个更为接口友好的 ...

  5. [GeekBand] C++ 基础知识之 The Big Three

    本文是GeekBand课程体系中,侯捷老师讲课内容的部分内容总结. 参考书籍如下:Effitive C++ C++ Primer 第五版 http://blog.csdn.net/lwbeyond/a ...

  6. hbase 判断列族是否存在

    public static boolean isExistColumnFamily(String tableName,String cf) throws IOException { if(isExis ...

  7. 十个最有“钱景”的IT技能, 你掌握了哪个?

    IT行业的失业率仍然徘徊在历史低点,其中某些岗位(如网络和安全工程师和软件开发商)的失业率在1%左右. Robert Half Technology最近的一项调查显示,大多数CIO将扩大IT团队或专注 ...

  8. 哪个项目管理工具好用到哭?JIRA VS 华为软件开发云

    一.产品介绍 JIRA是Atlassian公司出品的项目与事务跟踪工具,被广泛应用于缺陷跟踪.客户服务.需求收集.流程审批.任务跟踪.项目跟踪和敏捷管理等工作领域. 华为软件开发云 (DevCloud ...

  9. git can't merge 的处理 代码冲突问题的解决

    ***取回已经提交的代码 git reset HEAD^ git can't merge 的处理1.git status 确保status 为空,可以先提交2.git reset HEAD^    取 ...

  10. 写在使用 Linux 工作一年后

    start 去年公司空了几台台式机,当时看了下似乎配置比我用的乞丐版 air 略高一些,而且除了 ssd 以外还有一个 1T 的大硬盘,加上后面可能会有一段时间不做 iOS 了,那就不需要 macOS ...