传统注册存在的弊端 :
当我们点击注册时,会存在以下几个问题。
首先,浏览器会销毁当前页面,如果注册失败返回的新页面所有之前
填写的数据丢失。
其次,如果网络通信较差,我们表单提交请求数据到服务端,而服务端
又没有返回新的页面,此时用户处于一个等待状态(打断用户操作)。
另外,如果注册失败。从服务端响应回来的是一个新的注册页面,网络
传输一个页面需要消耗较多的网络资源,那么就会导致网络传输性能
下降。

一 什么是ajax(Asynchronous JavaScript and Xml)?
a 翻译过来就是异步的js和xml技术。
b 可以用来改善用户体验的技术,
c ajax本质是利用浏览器内置的一个特殊对象,异步的向服务器发送请求,服务器
一般只返回部分数据,浏览器接收到这些数据后,通过dom操作对当前页面进行局部
更新。整个过程页面无刷新,不打断用户的操作。

二 如何获取ajax对象
function getXhr(){
var xhr = null;
if(wind.XMLHttpRequest){ // 非ie浏览器
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObject("Microsoft.XMLHttp");
}
return xhr;
}
三 ajax对象重要的五个属性

该用户名可以使用
该用户名已经存在

onreadystatechange:绑定事件处理函数

readyState:0 1 2 3 4 ,只有状态等4,说明ajax对象与服务端之间的交互结束。
此时才可以对页面进行局部的更新。
responseText:接收服务端响应回来的文本

responseXML:接收服务端响应回来的xml文件。

status :对状态码进行判断,200表示正常状态。此时我们只接收状态为200返回的
部分数据。

四 ajax编程步骤

step1 获取ajax对象 var xhr = getXhr();
step2 ajax对象向服务端发送请求
get请求:

step2.1 ajax对象与服务端之间建立通信连接。
xhr.open('get','url','true/false');

第一个参数:表示发送请求的方式。
第二个参数:发送请求的地址 ,如果有参数需要把参数绑定在url请求
地址上。 'checkName.do?uname='+name
第三个参数:如果为true表示发送的是异步请求,
如果false表示发送的是同步请求。

step2.2 ajax对象绑定事件处理函数
xhr.onreadystatechange=f1

step2.3 xhr.send(null)
发送请求到服务端,此时ajax对象会准备一个空的数据包往服务端传递。

step3 编写服务端处理程序,接收ajax请求处理,处理完毕之后响应部分数据
交给ajax对象。 (编写ActionServlet)

step4 编写事件处理函数
function f1(){

}

post请求:

xhr.open('post','checkName.do',true);
xhr.setRequestHeader('content-type' , 'application/x-www-form-urlencoded');
xhr.onreadystatechange=f1
xhr.send("name="+username);

五 解决中文乱码
5.1 get请求乱码的原因?
当发送get请求时,非ie浏览器使用的是utf-8编码,ie浏览器默认使用gbk编码,
而服务端使用的是iso8859-1编码,两边编码不一致所以导致乱码产生。

解决办法
对于非ie浏览器发送的get请求,我们可以去修改server.xml文件添加URIEncoding="utf-8",
默认指定服务端接收个get请求时,使用utf-8接收。

对于ie浏览器我们可以指定发送请求参数时,使用utf-8编码,只需要给发送的url使用
encodeURI(url);

utf-8编码(变长编码):国际化最优编码,存储一个英文或数字,占一个字节。
一个中文字母占三个字节。
gbk:本地化最优编码。存储一个英文字母占一个字节。存储一个汉字占2个字节。

服务端默认使用iso8859-1编码。一个字母占一个字节。

5.2 post请求产生乱码的原因?
当发送post请求时,所有浏览器默认采用utf-8编码。而我们修改server.xml文件
指定编码URIEncoding="utf-8",只针对get请求有效。

解决办法 :
request.setCharacterEncoding("utf-8"); 这行代码只针对post请求有效。
告诉服务端接收浏览器发送过来的参数使用utf-8.

六 缓存问题 ?
当ie浏览器发送get请求时,第一次发送请求之后,请求地址保存在浏览器缓存中。
如果再次发送相同的请求,此时浏览器不会像服务端发送请求。而是直接从缓存中取出
上次访问的历史记录。

解决办法有两种?
1 默认使用post请求。

2 Math.random() 随机产生0~1之间随机数。
'checkName.do?name='+username+'&'+Math.random()

jQuery对ajax的支持
jQuery对ajax支持有两个好处:第一我们不会像以前写原生的ajax,需要写
一堆的模式化代码,我们只需要调用jQuery提供对ajax支持的方法即可,另外
使用原生的ajax去进行dom操作时,会出现浏览器不兼容问题,我们现在如果使用
jQuery,因为jQuery对dom操作封装性非常高,能够帮我们解决大部分浏览器不
兼容的问题,这样jQuery也能够帮助我们解决了ajax浏览器不兼容性问题。

1.load
作用:向服务器发送异步请求,将服务器返回的数据直接添加到符合要求的节点上。
用法:$obj.load(url[,data])
注:url:请求地址
data:请求参数,有两种格式:
字符串格式 "name=tom&age=22"
json对象格式 {"name":"tom","age":22}
该方法如果没有参数则默认发送get请求,如果有参数默认发送POST请求
<div> </div>
$('div').load('')
弊端:只能发送异步请求,不能发送同步请求。返回的数据直接填在当前的节点上,不能对返回的数据进行处理,如果返回是json格式
的数据,显然该方法不能满足要求
2.$.post()/$.get()
作用:只能异步的向服务器发送请求,可以使用回调函数处理服务端返回的数据
用法:$.get(url,[data],[callbock],type);
注:
url:请求地址
data:如果有参数则写,没参数可不写,有两种格式
字符串格式 "name=tom&age=22"
json对象格式 {"name":"tom","age":22}
callback:回调函数可以用来处理服务端返回的数据
function(data,status){

}
其中data表示从服务端获取响应回来的内容,status是一个字符串,描述ajax对象
接受服务端请求的状态(一般可以不写)

type:服务端返回的数据类型,可以是以下几种:
text:文本
HTML:HTML文档
json:json字符串
xml:xml文档
script:javascipt脚本
3.$.ajax() 重点掌握
作用:能够向服务端发送异步或同步请求,并且也可以使用回调函数处理服务端返回的数据
用法:$.ajax({json格式的字符串});
json格式的字符串参数?
$.ajax({
url:'请求的地址',
type:'请求方式 post/get',
data:请求参数{'name':username}或"name=username",
dataType:服务器返回的数据类型(text,html,xml,json,script),
sueccess:function(data,status){//成功接收服务端响应回来的数据
其中data表示从服务端获取响应回来的内容,status是一个字符串,描述ajax对象
接受服务端请求的状态(一般可以不写)
},
error:服务端处理失败调用的回调函数
async:如果 不写则默认为异步请求。也可以指定,false表示为同步,true表示为异步
})

关于ajax技术的更多相关文章

  1. 使用ajax技术实现txt弹出在页面上

    使用ajax技术实现txt弹出在页面上   使用ajax技术实现点击按钮,将TXT文本里的内容通过弹出框显示到页面上 /*事件会在页面加载完成后触发.*/ <script> window. ...

  2. 《所用到的AJAX技术基础》

    来自百度网页,w3cshool网页:AJAX = Asychronous JavaScript and XML,翻译成中文为:异步的JavaScript XML. 异步的意思就是不重新加载整个页面,后 ...

  3. Ajax技术

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  4. Ajax技术详解

    Ajax技术:Ajax描述了一种主要使用脚本(JS)操纵HTTP的web应用架构,它的主要特点是使用脚本操纵HTTP和web服务器进行数据交换,不会导致页面重载.Ajax的核心是JS的XMLHttpR ...

  5. Java之Ajax技术

    ajax(asynchronouse javascript and xml) 异步的javascript 和 xml(现在常把xml换成json): ajax是2005年提出的,在2006,2007年 ...

  6. 在 PHP 中结合 Ajax 技术进行图片上传

    前面几则日志中讲述了在 PHP 中上传文件,相信大家对 PHP 中如何进行文件上传已经初步掌握.本文来继续探讨在 PHP 中上传文件的技术,不同的是,本次上传将仅限于图片文件的上传,并且将采用 Aja ...

  7. ajax 技术和原理分析

    ajax所包含的技术 大家都知道ajax并非一种新的技术,而是几种原有技术的结合体.它由下列技术组合而成. 1.使用CSS和XHTML来表示. 2. 使用DOM模型来交互和动态显示. 3.使用XMLH ...

  8. Ajax 技术一

    一.Ajax概述 1.历史起源 1998年,微软公司Outlook Web Access研发小组在当时的IE浏览器中集成了一种技术,可以在客户端无刷新的前提下向服务器端发送Http请求,这门技术称之为 ...

  9. AJAX技术的核心

    //创建一个XMLHttpRequest对象 ,利用此对象与服务器进行通信 是AJAX技术的核心 /** * 获取XmlHttpRequest对象 */ function getXMLHttpRequ ...

  10. 你真正的了解Ajax?Ajax技术简述

    Ajax技术是目前在浏览器中通过JavaScript脚本可以使用的所有技术的集合.Ajax并没有创造出某种具体的新技术,它所使用的大多数技术都是在很多年以前就已经存在了,然而Ajax以一种崭新的方式来 ...

随机推荐

  1. fastjson——json工具库

    fastjson alibaba fastjson是阿里巴巴公司开源维护的一个处理json格式数据的java工具库. 功能特性: 数据绑定databind (json string <--> ...

  2. csf 课件转化为wmv正常格式

    1. 下载csf文件到本地:如下图 2.从下面百度网盘下载到本地: https://pan.baidu.com/s/1BBbgq  n85a 3.安装并出现下面图标,点击打开 4. 运行如下图 5.  ...

  3. JS——标记

    continue 语句(带有或不带标签引用)只能用在循环中.break 语句(不带标签引用),只能用在循环或 switch 中.通过标签引用,break 语句可用于跳出任何 JavaScript 代码 ...

  4. 控制台——EventLog实现事件日志操作

    我们应该如何通过写代码的方式向其中添加“日志”呢? 在操作之前,先明确几个概念: 1:事件日志名(logName):“事件查看器”中的每一项,如“应用程序”.“Internet Explorer”.“ ...

  5. [Windows Server 2003] 安装IIS6.0及FTP

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装IIS6. ...

  6. 011--c数组--排序--组成最大数

    数组--排序--组成最大数   组成最大数   任意输入一个自然数,输出该自然数的各位数字组成的最大数.例如,输入 1593 ,则输出为 9531 . 输入: 自然数 n 输出: 各位数字组成的最大数 ...

  7. Spring学习笔记_day01_ioc

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! Spring_day01 spring是一站式的框架, ...

  8. HDU_2212_水

    DFS Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  9. python 获取本机环境信息

    一.函数 1.socket.gethostname():不带任何参数,返回一个字符串(主机名),通常不完整.比如csm.example.com 只会返回csm 2.socket.getfqdn():带 ...

  10. return和return false的区别

    1. return返回null,起到中断方法执行的效果,只要不return false事件处理函数将会继续执行,表单将提交2. return false,事件处理函数会取消事件,不再继续向下执行.比如 ...