AJAX:”Asynchronous JavaScript and XML” 中文意思:异步JavaScript和XML。 指一种创建交互式网页应用的网页开发技术。
不是指一种单一的技术,而是有机地利用了一系列相关的技术: 简单理解为:JavaScript + XMLHttpRequest + CSS +服务器端 的集合
AJAX特点
Ajax在本质上是一个浏览器端的技术 Ajax技术之主要目的在于局部交换客户端及服务器间之数据
这个技术的主角XMLHttpRequest 的最主要特点,在于能够不用重新载入整个版面来更新资料,也就是所谓的Refresh without Reload(轻刷新) 与服务器之间的沟通,完全是透过Javascript 来实行 使用XMLHttpRequest 本身传送的数据量很小,所以反应会更快,也就让网络程式更像一个桌面应用程序 AJAX 就是运用Javascript 在后台悄悄帮你去跟服务器要资料,最后再由Javascript 或DOM 来帮你呈现结果,因为所有动作都是由Javascript 代劳,所以省去了网页重载的麻烦,使用者也感受不到等待的痛苦 注:JavaScript是一门单线程语言。无法将指定的一段js开启一个新的线程来执行。
XMLHttpRequest对象
简而言之:它可以异步从服务器端获取txt或者xml数据 老版本IE: new ActiveXObject("Microsoft.XMLHTTP"); 新版本浏览器: new XMLHttpRequest();
异步请求基本步骤
使用XMLHttpRequest对象 按照下面模式,可以同步地XMLHttpRequest对象:
创建对象; - new (叫助手过来) 创建请求; - open (告诉他要去做的事情) 发送请求; - send (去吧)
主要方法及操作步骤: <1>获取对象:构造方法 <2>建立连接:方法open(method(采用HTTP协议请求方式GET POST),url(网址地址),isAsync(是否异步 true---同意异步)) <3>配置获取反馈:属性onreadystatechange(状态变化的监听) <4>发送消息:方法send
创建XMLHttpRequest对象
先来创建XMLHttpRequest对象 在IE、Firefox、safari和Opera中创建该对象的JavaScript代码为: var xhr = new XMLHttpRequest(); 在IE5/6中代码为: var xmlRequest = new ActiveXObject(“Microsoft.XMLHTTP”); 注意,JavaScript区分大小写。
编写回调函数
1.在xhr.send之前添加设置回调函数代码: xhr.onreadystatechange = watching;
2.回调函数 function watching() { if (xhr.readyState == 4) {//请求状态 if (xhr.status == 200) {//服务器返回的状态码 var msg = xhr.responseText; //服务器返回的字符串 } else alert("服务器错误!" + ajaxH.status); } } 判断时注意,要:xhr.readyState == 4&&xhr.status == 200,不要xhr.status == 200&&xhr.readyState == 4
异步对象readyState属性
readyState属性 readyState属性指出了XMLHttpRequest对象在发送/接收数据过程中所处的几个状态。XMLHttpRequest对象会经历5种不同的状态。 :未初始化。new完后; :已打开。对象已经创建并初始化,但还未调用send方法 :已发送。已经调用send 方法,但该对象正在等待状态码和头的返回; :正在接收。已经接收了部分数据,但还不能使用该对象的属性和方法,因为状态和响应头不完整; :已加载。所有数据接收完毕
XMLHttpRequest对象属性
一、onreadystatechange属性,设置回调函数。 二、readyState属性,获取当前XMLHttpRequest对象执行的状态: 1> 0表示以创建XMLHttpRequest对象,但是还没有初始化,即没有调用open()方法设置XMLHttpRequest对象。 2>1表示创建了XMLHttpRequest对象,并且调用了open()方法进行初始化,但是还没有调用send()方法。 3>3表示浏览器正在接受服务器的响应数据。 4>所有数据已经被接受完毕。 三、status属性,服务器返回的http状态码。(>=200 and <300、304未修改,读取缓存。都表示成功) 四、statusText属性,服务器返回的状态码对应的友好的文字说明,比如200对应的OK. 五、responseText属性,以字符串方式获取服务器对客户端的响应。 六、responseXml属性,当请求的是一个xml文件时,或者响应头中Content-Type为:text/xml或application/xml时,返回一个XmlDocument对象(Dom节点对象),支持标准的dom的成员,比如:childNodes、documentElement、firstChild、lastChild、nextSibling、nodeName、nodeType、nodeValue、parentNode、doctype等。
XMLHttpRequest对象常用方法
一、open("get","url",true)初始化,如果第三个参数为false,则js等待请求完毕后才会继续执行。 二、setRequestHeader("","")增加http请求头信息。在open()之后,send()之前调用。 三、send(null);发送请求。send()方法的参数表示为在请求报文体中发送的数据内容。为了最大化的浏览器兼容问题,如果没有请求报文体就传递null。get请求没有请求报文体,所以一般为null。使用post请求时才需要设置报文体。 四、getResponseHeader("Content-Type"),根据响应的报文头获得报文内容。 五、getAllResponseHeaders();获取所有的响应报文头内容。 六、abort();取消当前的http请求,取消之后如果要重新发起请求,建议重新创建一个XMLHttpRequest对象。
XMLHttpRequest常用方法
方法 说明 abort 取消请求 open 需要使用多个参数,第一个设置方法属性,第二个设置目标URL,第三个指定是同步(false)还是异步(true)发送请求 send 发送请求到服务器 setRequestHeader() 添加自定义HTTP头到请求 getAllResponseHeaders() 获取HTTP响应头的整个列表 getResponseHeader('key') 仅获取指定的HTTP响应头
XMLHttpRequest常用属性
属性 说明 onreadystatechange 返回或设置异步请求的事件处理程序 readyState 返回状态码:0:未初始化;1:打开;2:发送;3:正在接收;4:已加载 responseText 使用字符串返回HTTP响应 responseXML 使用XML DOM对象返回HTTP响应,返回的是一个对象,不是xml字符串。 status 返回HTTP状态码
Ajax使用注意
xhr只能向同一个域中的相同端口号、相同协议的url发起请求,不能跨域,否则会引起错误。 为了浏览器兼容,get请求时最好为send()传递null参数。 在创建了xhr对象后立刻设置onreadystatechange事件,这样就能监视到所有的状态。如果不需要监视其他状态只监视readyState==4的状态则可以在send()之后设置。 get请求时,请求中的QueryString的参数名称与参数值最好使用encodeURIComponent()进行编码。否则在某些浏览器下无法获取该值,比如IE. post请求时,为了像表单那样提交数据需要设置请求的Content-Type为:application/x-www-form-urlencoded。send("键=值&键=值") 解析json格式时eval("("+json+")")。但有安全性问题。
-》使用注意 -》示例2:使用post方式提交 需要设置头信息:xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); -》如果中文乱码的解决:在客户端使用window.encodeURIComponent()进行编码 在服务器端使用Server.UrlDecode()进行解码
<!DOCTYPE html> <html xmlns="
http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title>
<script type="text/javascript"> window.onload = function () { var btnGettime = document.getElementById("btnGetTime"); btnGettime.onclick = function () {
//--------GET------------- ////1.创建对象 //var xhr = new XMLHttpRequest(); ////2.打开连接 //xhr.open('get', 'GetTime.ashx?title=xlb', true); ////3.配置 //xhr.onreadystatechange = function () { // //如果成功返回则展示 // if (xhr.readyState==4) {//通信成功 // if (xhr.status == 200)//成功返回信息 // { // var showTime = document.getElementById('showTime'); // showTime.innerHTML = xhr.responseText; // } // } //}; ////4.发送 //xhr.send(null);//当使用GET请求时,最好设置为null
//-----------POST--------------
var showTime = document.getElementById('showTime'); showTime.innerHTML = '<img src="data:images/loading.gif" />';
//1.创建对象 var xhr = new XMLHttpRequest(); //2.打开连接 xhr.open('post', 'GetTime.ashx', true); //3.配置 xhr.onreadystatechange = function () { //如果成功返回则展示 if (xhr.readyState == 4) {//通信成功 if (xhr.status == 200)//成功返回信息 { var showTime = document.getElementById('showTime'); showTime.innerHTML = xhr.responseText; } } }; //4.发送 //以post请求发送请求 xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send('title=yg');
}
} </script>
</head> <body> <input type="button" id="btnGetTime" value="获取当前时间" /> <div id="showTime">
</div> </body> </html>
--------GetTime.ashx----------
using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Web;
namespace t1_HelloWorld { /// <summary> /// GetTime 的摘要说明 /// </summary> public class GetTime : IHttpHandler {
public void ProcessRequest(HttpContext context) {
Thread.Sleep(5000);
string title = context.Request["title"]; context.Response.ContentType = "text/plain"; context.Response.Write(DateTime.Now.ToString()+"---"+title); }
public bool IsReusable { get { return false; } } } }
=======================================================
使用jquery完成异步操作 -》参考文档介绍提供的异步api url:请求地址 type:请求方式,主要是get、post data:{}:请求的数据 dataType:返回值的类型,主要有xml、text、json、script、html success:function(data){...}成功的回调函数(4,200)
- ASP.NET MVC 网站开发总结(五)——Ajax异步提交表单之检查验证码
首先提出一个问题:在做网站开发的时候,用到了验证码来防止恶意提交表单,那么要如何实现当验证码错误时,只是刷新一下验证码,而其它填写的信息不改变? 先说一下为什么有这个需求:以提交注册信息页面为例,一般 ...
- ASP.NET MVC中使用ASP.NET AJAX异步访问WebService
使用过ASP.NET AJAX的朋友都知道,怎么通过ASP.NET AJAX在客户端访问WebService,其实在ASP.NET MVC中使用ASP.NET AJAX异步访问WebService 也 ...
- ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则
ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...
- 关于我们ajax异步请求的方法与知识
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school ...
- 原生ajax异步请求基础知识
一.同步交互与异步交互的概念: * 同步交互:客户端向服务器端发送请求,到服务器端进行响应,这个过程中,用户不能做任何其他事情(只能等待响应完才能继续其他请求). * 异步交互:客户端向服务器端发送请 ...
- ajax异步请求
做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...
- 淘宝购物车页面 智能搜索框Ajax异步加载数据
如果有朋友对本篇文章的一些知识点不了解的话,可以先阅读此篇文章.在这篇文章中,我大概介绍了一下构建淘宝购物车页面需要的基础知识. 这篇文章主要探讨的是智能搜索框Ajax异步加载数据.jQuery的社区 ...
- jquery Ajax异步请求之session
写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...
- 触碰jQuery:AJAX异步详解
触碰jQuery:AJAX异步详解 传送门:异步编程系列目录…… 示例源码:触碰jQuery:AJAX异步详解.rar AJAX 全称 Asynchronous JavaScript and XML( ...
- html5+php实现文件的断点续传ajax异步上传
html5+php实现文件的断点续传ajax异步上传 准备知识:断点续传,既然有断,那就应该有文件分割的过程,一段一段的传.以前文件无法分割,但随着HTML5新特性的引入,类似普通字符串.数组的分割, ...
随机推荐
- [个人论文]一种基于GPU并行计算的MD5密码解密方法
求轻喷... [顺便get一份LaTeX论文模板....还是XeLaTex好用.珍爱生命远离CJK http://files.cnblogs.com/files/pdev/paper.zip
- 查看 SHA1
keytool -v -list -keystore C:\Users\tianyingzhong\.android\debug.keystore 输入密钥库口令: android android
- CSS-学习笔记三
绝对定位:1. 脱离了文档流,没有浮动效果2. 默认情况下,设置了绝对定位的块,它的Top,left是相对于浏览器的3. 当给设置了绝对定位的块的父元素设置定位的时候(绝对.相对.固定), 那么 ...
- css权威指南学习笔记
2016-08-03 1,继承 一般大多数框模型属性都是不能继承的.如:padding .margin .border .background 都不能继承. 继承值,完全没有特殊性.(就是优先级最低) ...
- 【先定一个小目标】怎么解决mysql不允许远程连接的错误
最近使用Navicat for MySQl访问远程mysql数据库,出现报错,显示“1130 - Host'xxx.xxx.xxx.xxx' is not allowed to connect to ...
- ruby 基础知识(一)
突然今天发现一大神的博客:http://www.cnblogs.com/jackluo/archive/2013/01/22/2871655.html 相信初学者会受益颇多 ruby 参考文档 ...
- 参加SFDC的感触
今天参加了SFDC. 第一次参加这样的技术大会,感触总是有点. 简单的记录如下 1.自动化运维在行业已经成为趋势,未来DevOps 作为开发和运维统一已经是新时代对开发人员的要求.公司架构一个自己的自 ...
- SIP学习笔记(转)
本文转发自:http://blog.chinaunix.net/uid-20655530-id-1589483.html 学习 SIP 协议最快捷的方法是通过范例来学习, 找到了一个完整的呼叫流程,l ...
- Web压力测试系统-nGrinder
nGrinder是一个免费的.开放源代码的Web性能测试工具.它本身是JAVA WEB应用程序,在Tomcat服务器中运行. 它由一个controller端和一个或多个Agent端组成.nGrinde ...
- beaglebone black 安装QNX过程
首先去http://community.qnx.com/sf/go/projects.bsp/frs.texas_instruments_am335_beaglebo 把下面4个下载下来.