记得有次面试的时候面试官问我知道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. Identifying a distributed denial of service (DDOS) attack within a network and defending against such an attack

    The invention provides methods, apparatus and systems for detecting distributed denial of service (D ...

  2. Swagger 专题

    随着互联网技术的发展,现在的网站架构基本都由原来的后端渲染,变成了:前端渲染.前后端分离的形态,而且前端和后端在各自的技术道路上越走越远. 前端和后端的唯一联系,变成了API接口:API文档成了前后端 ...

  3. scala 主从构造器

    package cn.scala_base.oop.scalaclass /** * 构造器分为两种,一种是主构造器,另一种是从构造器,所有的从构造器必须在其方法体 * 的第一行调用主构造器 * * ...

  4. Android studio 无法启动安卓模拟器

    1.通过Android SDK Manager在extra中,找到并选中了那个Intel x86 Emulator Accelerator (HAXM) 2.手动启动HAXM    去对应的sdk\e ...

  5. eCognition学习记录

    作者:朱金灿 来源:http://blog.csdn.net/clever101 昨天公司从外面请了人讲解eCognition的最新进展及项目二次开发应用情况.我做了大致下面记录: 1.  eCogn ...

  6. spring集成Quartz时区问题造成任务晚执行八小时

    项目中在Spring中集成了Quartz,配置的每日凌晨执行的定时任务都是到了八点多才执行,经过一番查找,可能是时区问题造成的. 一种解决办法是在JVM启动参数中增加 --Duser.timezone ...

  7. Spring Cloud和Docker搭建微服务平台

    用Spring Cloud和Docker搭建微服务平台 This blog series will introduce you to some of the foundational concepts ...

  8. 广义逆高斯分布(Generalized Inverse Gaussian Distribution)及修正贝塞尔函数

    1. PDF generalized inverse Gaussian distribution (GIG) 是一个三参数的连续型概率分布: f(x)=(a/b)p/22Kp(ab−−√)xp−1e− ...

  9. 放大缩小,只需要使用这2个函数:SetWindowExtEx、SetViewportExtEx

    相似函数: ScaleWindowExtEx.ScaleViewportExtEx 本例效果图: 代码文件: unit Unit1; interface uses   Windows, Message ...

  10. java学习笔记(2)——函数

    int a = 1; a = a++; 1,取出a的值1作为a++表达式的值(a++表达式等于1) 2,a增加1变为2 3,执行赋值运算,a++表达式的值再赋给a,a又成为了1. ---------- ...