AJAX 创建对象 请求 响应 readyState

  AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML).

    不是新的编程语言, 而是一种使用现有标准的新方法.

    最大的优点是在不重新加载整个页面的情况下, 可以与服务器交换数据并更新部分网页内容

    不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行.

  应用:

    运用XHML+CSS来表达咨询;

    运用JavaScripct来操作DOM(Documnet Object Model) 来执行动态效果;

    运用XML 和XSLT操作资料;

    运用XMLHttpRequest或新的Fetch API与网页服务器进行异步资料交换;

    AJAX与Flash、Silverlight和Java Applet等RIA技术是有区分的。

一.XHR(XMLHttpRequest)创建对象

  创建XML对象语法:

variable=new XMLHttpRequest();

  老版本的Internet Explorer (IE5 和 IE6)使用ActiveX对象:

XMLHttpRequest

  为了应对所有的现代浏览器,包括 IE5 和 IE6,请检查浏览器是否支持 XMLHttpRequest 对象。如果支            持,则创建 XMLHttpRequest 对象。如果不支持,则创建 ActiveXObject :

var xmlhttp;
if (window.XMLHttpRequest)
{
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xmlhttp=new XMLHttpRequest();
}
else
{
// IE6, IE5 浏览器执行代码
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

二.XHR请求

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

    open(method,url,async):

    规定请求的类型,URl以及是否异步处理请求

      method: 请求的类型,GET或POST

      url: 文件在服务器的位置

      async: true(异步)或false(异步)

    send(string):

    将请求发送到服务器.

      string: 仅用于POST请求

    1.使用 GET 还是POST?

    与POST相比, GET更简单也更快,并且在大部分情况下都能用,然而,在下面情况下,请使用POST请求.

      无法使用缓存文件(更新服务器上上网文件或数据库)

      向服务器发送大量数据(POST没有数据量限制)

      发送包含未知字符的用户输入时,POST比GET更稳定也更可靠

一个简单的 GET 请求:
xmlhttp.open("GET","/try/ajax/demo_get.php",true);
xmlhttp.send(); 在上面的例子中,您可能得到的是缓存的结果。
为了避免这种情况,请向 URL 添加一个唯一的 ID:
xmlhttp.open("GET","/try/ajax/demo_get.php?t=" + Math.random(),true);
xmlhttp.send(); 如果您希望通过 GET 方法发送信息,请向 URL 添加信息:
xmlhttp.open("GET","/try/ajax/demo_get2.php?fname=Henry&lname=Ford",true);
xmlhttp.send();

GET请求

一个简单POST请求:
xmlhttp.open("POST","/try/ajax/demo_post.php",true);
xmlhttp.send(); 如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头。然后在 send() 方法中规定您希望发送的数据:
xmlhttp.open("POST","/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("fname=Henry&lname=Ford"); setRequestHeader(header,value)
向请求添加 HTTP 头。
header: 规定头的名称
value: 规定头的值

POST请求

    2.异步-True 或 False?

    AJAX 指的是异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。

    XMLHttpRequest 对象如果要用于 AJAX 的话,其 open() 方法的 async 参数必须设置为true.

    通过AJAV, JavaScript无需等待服务器的响应,而是:

       在等待服务器响应时执行其他脚本

       当响应就绪后对响应进行处理

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

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","/try/ajax/ajax_info.txt",true);
xmlhttp.send();

Async=true

我们不推荐使用 async=false,但是对于一些小型的请求,也是可以的。

请记住,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。

注意:当您使用 async=false 时,请不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可:

xmlhttp.open("GET","/try/ajax/ajax_info.txt",false);
xmlhttp.send();
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

Async=false

三.XHR响应

  1.服务器响应

  如需 获得来自服务器的响应,请使用XMLHttpRequest对象的responseTxst 或responseXML属性

  responseText  获得字符串形式的响应数据

  responXML  获得XML形式的响应数据

  2.responText属性

  如果来自服务器的响应并非XML,请使用respon Text属性

  responseText属性返回字符串形式的响应,因此您可以这样使用:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

  3.responseXML属性

  如果来自服务器的响应时XML,而且需要作为XML对象进行解析,请使用respnseXML属性:

xmlDoc=xmlhttp.responseXML;
txt="";
x=xmlDoc.getElementsByTagName("ARTIST");
for (i=0;i<x.length;i++)
{
txt=txt + x[i].childNodes[0].nodeValue + "<br>";
}
document.getElementById("myDiv").innerHTML=txt;

四.XHR readyState

  1.onreadystatechange事件

  当请求被发送到服务器时,我们需要执行一些基于响应的任务.

  每当readyState改变时,就会触发 onreadystatechange事件.

  resdyState属性存在有XMLHttpRequest的状态信息.

  

  onreadystatechange:  储存函数(或函数名), 每当readyState属性改变时,就会调用该函数.

  readyState:  存有XMLHttpRequest的状态,从0到4发生改变,

    0: 请求末初初始化

    1: 服务器连接已建立

    2: 请求已接受

    3: 请求处理中

    4: 请求已完成,且响应已就绪

  status:  200: "OK"

       404: 未找到页面

  在onreadyatatechange 事件中,我们规定当服务器响应已做好被处理的准备时所执行的任务

  当 readyState 等于 4 且状态为200, 表示响应已就绪

xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
} 回调函数是一种以参数形式传递给另一个函数的函数。

  2.使用回调函数  

  回调函数是一种以参数形式传递给另一个函数的函数。

  如果您的网站上存在多个 AJAX 任务,那么您应该为创建 XMLHttpRequest 对象编写一个标准的函数,            并为每个 AJAX 任务调用该函数。

  该函数调用应该包含 URL 以及发生 onreadystatechange 事件时执行的任务(每次调用可能不尽相                    同):

function myFunction()
{
loadXMLDoc("/try/ajax/ajax_info.txt",function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
}
});
}

AJAX 创建对象 请求 响应 readyState的更多相关文章

  1. 用jquery和php实现ajax异步请求响应

    ajax技术可以实现异步请求和响应,下面的是用jquery向一个php脚本发送异步请求,并得到响应. 第一步,准备好前台的html表单,和jquery实现的ajax请求 <html lang=& ...

  2. Ajax的基本请求/响应模型

    一.Ajax工作核心 Ajax的核心是JavaScript对象XMLHttpRequest(简称XHR).它是一种支持异步请求的技术.可以通过使用XHR对象向服务器提出请求并处理响应,而不阻塞用户. ...

  3. ajax请求响应中用window.open打开新窗口会被浏览器拦截的解决方式

    一.问题描述 ajax 异步请求成功后需要新开窗口打开 url,使用的是 window.open() 方法,但是会被浏览器给拦截了,需要用户点下. 二.问题分析 浏览器之所以拦截新开窗口是因为该操作并 ...

  4. AJAX——POST请求

    POST.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. Ajax——Get请求

    Get.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  6. AJAX异步请求原理和过程

    AJAX 指异步 JavaScript 及 XML(Asynchronous JavaScript And XML),它不是一种新的编程语言,而是一种使用现有标准的新方法. AJAX 基于 JavaS ...

  7. 原生JS写Ajax的请求函数

    一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面:ajax的技术核心是 XMLHttpRequest 对象:ajax 请求过程:创建 XMLHttpRequest 对象.连接服务 ...

  8. 原生ajax异步请求基础知识

    一.同步交互与异步交互的概念: * 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求). * 异步交互:客户端向服务器端发送请 ...

  9. ajax数据请求5(php格式)

    ajax数据请求5(php格式): <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...

随机推荐

  1. 解决SpringBoot+JPA中使用set方法时自动更新数据库问题

    项目进行了三分之二了,突然出现一个很诡异的bug,数据库存储的用户表中密码信息总是自动消失一部分,头疼了几天后突然想起同事有个对低权限用户查询的用户信息向前台传送时会把密码设成null后再传输,心想是 ...

  2. RobotFrameWork+APPIUM实现对安卓APK的自动化测试----第五篇【AppiumLibrary校验函数介绍】

    http://blog.csdn.net/deadgrape/article/details/50619050 以上连作者先跪一下方便面,在上一篇中,作者遗漏了两个常用的函数: 1.长按 Long P ...

  3. 0111MySQL优化的奇技淫巧之STRAIGHT_JOIN

    转自博客http://huoding.com/2013/06/04/261 问题 通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下: SELECT post.* F ...

  4. cogs 969. [NOIP2006] 数列

    969. [NOIP2006] 数列 ★☆   输入文件:sequenc.in   输出文件:sequenc.out   简单对比时间限制:1 s   内存限制:162 MB 题目描述 给定一个正整数 ...

  5. Java Secret: Using an enum to build a State machine(Java秘术:用枚举构建一个状态机)

    近期在读Hadoop#Yarn部分的源代码.读到状态机那一部分的时候,感到enmu的使用方法实在是太灵活了,在给并发编程网翻译一篇文章的时候,正好碰到一篇这种文章.就赶紧翻译下来,涨涨姿势. 原文链接 ...

  6. C++数值类型极限值的获取

    C/C++中基本类型的数值极限值一般来说都是与详细平台有关的,在程序设计的过程中为了写出与平台无关的程序则必须通过合理科学的方法去获取各种类型的极值,经常使用的获取方法有两种:一种是传统的C语言所採用 ...

  7. Android 零基础学习之路

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正則表達式. 3.面向对象的抽象.封装,继承,多态.类与对象.对象初始化 ...

  8. wifi破解不是真黑客不靠谱?

    Wifi破解神器骗局:摆地摊+网络兜售 近日,"万能wifipassword破解器"风靡全国地摊.各地小贩開始兜售这样的蹭网卡.声称可破解各种wifipassword,当场測试也是 ...

  9. IOC与DI区别

    (1)IOC:控制反转,把对象创建交给spring进行配置. (2)DI:依赖注入,向类里面的属性中设置值. (3)关系:依赖注入不能单独存在,需要在IOC的基础之上完成操作.

  10. HMM XSS检测

    HMM XSS检测 转自:http://www.freebuf.com/articles/web/133909.html 前言 上篇我们介绍了HMM的基本原理以及常见的基于参数的异常检测实现,这次我们 ...