文章部分资源来源:(http://blog.csdn.net/lzkkevin/article/details/6777474)以及(http://www.cnblogs.com/hwx0807/archive/2011/06/28/2092205.html)

用JavaScript实现的Ajax,在性能上要比使用Jquery的ajax方法快一些。javascript主要是利用XMLHttpRequest对象发送异步请求。

使用XMLHttpRequest对象发送请求分为4步完成:

(1).创建XMLHttpRequest对象

(2).设置回调函数

(3).用XMLHttpRequest对象的open方法建立通信连接

(4).发送请求

1.创建xmlhttprequest对象

<script type="text/javascript">
//定义XMLHttpRequest对象
if(window.XMLHttpRequest){
//兼容Mozilla、Safari等非IE浏览器
var xmlhttprequest = new XMLHttpRequest();
}else{
if(window.ActiveXObject){
//兼容IE浏览器
try{
var xmlhttprequest = new ActiveXObject('Msxml12.XMLHTTP');
}catch(e){
try{
xmlhttprequest = new ActiveXObject('Microsoft.XMLHTTP');
}catch(e){
}
}
}
}
</script>

2.设置回调函数

xmlhttprequest.onreadystatechange = callback ;
function callback(){
if(xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200){
var result = xmlhttprequest.responseText;
if(result == "true"){
 alert("success");
  }else{
    alert("fail");
  }
  }
}

3.建立通信连接,可以有get和post两种方式

xmlhttprequest.open("POST","setServer.do?serverSel="+serverSel);
//xmlhttprequest.open("GET","setServer.do?serverSel="+serverSel);

4.发送请求

xmlhttprequest.send(null);

完整代码以及解析:

POST方式:

function changeServer(){
document.getElementById("serverCheck").checked = false ;
var serverSel = document.getElementById("serverSel").value;
// 设置回调函数,用来判断代码执行是否正确,以及执行结束后的操作
xmlhttprequest.onreadystatechange = callback ;
//调用XMLHttpRequest对象的open方法,打开与服务器之间的同步通信连接
//xmlhttprequest.open(Method,Url,Async,User,Password)方法
//Method:表示Http方法,POST,GET,PUT,PROPFIND
//Url:参数请求的url
//Async:可选项,设置是否为异步通信, 默认true表示可以异步,
//取false,表明异步发出请求之后不需要等待服务端的响应,继续执行其他操作。
//User,password:可选项,表示请求的文件需要进行服务器进行验证
xmlhttprequest.open("POST","setServer.do?serverSel="+serverSel);
// 设置请求的消息头
//application/x-www-form-urlencoded表示传递的是表单值
// 一般使用POST都必须设置此项,否则服务器无法识别传递过来的数据
//虽然该值表示表单值,但是也可以一text/xml或者application/xml类型给服务器直接发送XML数据
//甚至也可以application/json类型发送JavaScript对象数据
xmlhttprequest.setRequestHeader('Content-type','application/x-www-form-urlencoded');
// 设置User-Agent为XMLHTTP便于服务器能够识别出XMLHttpRequest异步请求
//和其他客户端的普通请求
xmlhttprequest.setRequestHeader('User-Agent','XMLHTTP');
//向服务器发送请求 xmlhttprequest.send(null); }
function callback(){
//接收响应数据
//xmlhttprequest.readyState返回当前请求的状态,如果为4则交互完成
//xmlhttprequest.status返回服务器的响应状态。200表示ok 一切正常
if(xmlhttprequest.readyState == 4 && xmlhttprequest.status == 200){
// xmlhttprequest.responseText是在action中返回的内容,可以根据内容判断后台执行结果
var result = xmlhttprequest.responseText;
if(result == "true"){
 alert("success");
  }else{
    alert("fail");
  }
  }
}
PrintWriter out = null;
try {
out = response.getWriter();
if (flag) {
out.print("true");
}else {
out.print("false");
}
out.close();
} catch (IOException e) {
e.printStackTrace();
}
//xmlhttprequest.responseText得到的内容正是PrintWriter输出的内容

另附:XMLHttpRequest.readyState的五种状态

readyState 返回当前请求的状态,只读.
-
(0)实例化
此阶段确认XMLHttpRequest对象是否创建,并为调用open()方法作好准备。值为0表示对象已经实例化,否则浏览器会报错--对象不存在。
(1)载入
此阶段对XMLHttpRequest对象进行初始化,即调用open()方法,根据参数(method,url,true)完成对象状态的设置。并调用send()方法开始向服务端发送请求。值为1表示正在向服务端发送请求。
(2)载入完成
此阶段接收服务器端的响应数据。但获得的还只是服务端响应的原始数据,并不能直接在客户端使用。值为2表示已经接收完全部响应数据。并为下一阶段对数据解析作好准备。
(3)交互
此阶段解析接收到的服务器端响应数据。即根据服务器端响应头部返回的MIME类型把数据转换成能通过responseBody、responseText或responseXML属性存取的格式,为在客户端调用作好准备。状态3表示正在解析数据。
(4)完成
此阶段确认全部数据都已经解析为客户端可用的格式,解析已经完成。值为4表示数据解析完毕,可以通过XMLHttpRequest对象的相应属性取得数据。
概而括之,整个XMLHttpRequest对象的生命周期应该包含如下阶段:
创建-初始化请求-发送请求-接收数据-解析数据-完成
在具体应用中,明确了readyState的五个状态(XMLHttpRequest对象的生命周期各个阶段)的含义。

GET方式:(比POST方式少设置两个内容,一般post的时候需要加上如下设置)

// 设置请求的消息头
//application/x-www-form-urlencoded表示传递的是表单值
// 一般使用POST都必须设置此项,否则服务器无法识别传递过来的数据
//虽然该值表示表单值,但是也可以一text/xml或者application/xml类型给服务器直接发送XML数据
//甚至也可以application/json类型发送JavaScript对象数据
xmlhttprequest.setRequestHeader('Content-type','application/x-www-form-urlencoded');
// 设置User-Agent为XMLHTTP便于服务器能够识别出XMLHttpRequest异步请求
//和其他客户端的普通请求
xmlhttprequest.setRequestHeader('User-Agent','XMLHTTP');

js ajax简单使用的更多相关文章

  1. MVC3.0+knockout.js+Ajax 实现简单的增删改查

    MVC3.0+knockout.js+Ajax 实现简单的增删改查 自从到北京入职以来就再也没有接触MVC,很多都已经淡忘了,最近一直在看knockout.js 和webAPI,本来打算采用MVC+k ...

  2. 前端(十七)—— jQuery基础:jQuery的基本使用、JQ功能概括、JS对象与JQ对象转换、Ajax简单应用、轮播图

    jQuery的基本使用.JQ功能概括.JS对象与JQ对象转换.Ajax简单应用.轮播图 一.认识jQuery 1.什么是jQuery jQuery是对原生JavaScript二次封装的工具函数集合 j ...

  3. 简单的前端js+ajax 购物车框架(入门篇)

    其实,一直想把自己写的一些js给总结下,也许是能力有限不能把它完美结合起来.只能自己默默的看着哪些代码,无能为力. 今天在公司实在没有事做,突然就想到写下商城的购物车的前端框架,当然我这里只有购物车的 ...

  4. 前端开发:mock.js的简单应用(生成随机数据,拦截 Ajax 请求)

    摘要 在前端开发过程中,后端接口还没有完全开发完成时,前端开发人员就需要学会自己模拟后端接口数据,更快更好的完成开发任务.模拟后端接口数据的js库有很多,今天就简单就简单的分享下mock.js在前端开 ...

  5. HTML(.js) – 最简单的方式操作 DOM 的 JS 库

    HTML(.js) 是一个轻量的(压缩后~2kb) JavaScript 库,简化了与 DOM 交互的方法. 这个 JavaScript 库的方法可读性很好,并具有搜索和遍历 DOM 的方法.相比 j ...

  6. JavaScript学习总结【12】、JS AJAX应用

    1.AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技 ...

  7. ajax简单后台交互

    ajax简单后台交互 1,扯淡 单身的生活,大部分时间享受自由,小部分时间忍受寂寞. 生活有时候,其实蛮苦涩,让人难以下咽.那些用岁月积累起来的苦闷,无处宣泄,在自己的脑海里蔓延成一片片荆棘,让你每每 ...

  8. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  9. ajax简单手写了一个猜拳游戏

    使用ajax简单写一个猜拳游戏 HTML代码 <!DOCTYPE HTML> <html lang="en-US"> <head> <me ...

随机推荐

  1. Java——单选按钮:JRadioButton

    import java.awt.Container; import java.awt.GridLayout; import java.awt.event.WindowAdapter; import j ...

  2. linux中快速清空文件内容的几种方法

    这篇文章主要介绍了linux中快速清空文件内容的几种方法,需要的朋友可以参考下 $ : > filename $ > filename $ echo "" > f ...

  3. C++ wMA 算法

    CMakeLists.txt project(aaa) add_library(aaa SHARED aaa.cpp) add_executable(bbb bbb.cpp) target_link_ ...

  4. 序列化与反序列化成XML

    http://blog.itpub.net/12639172/viewspace-490786/ 现在XML都普遍的用到了很多地方,它的平台无关.方便.结构化.适用性的特点让人不得不去接受它,在C#中 ...

  5. [Unity3D][转] 关于Assets资源目录结构管理

    分享个我们项目常用的目录结构,微调过很多次,最终到了这个版本.个人认为这种管理资源方式是不错的.欢迎探讨各个细节~ 更新于2013.5.30   Asserts   --Editor 自写的灵活方便插 ...

  6. centos 7.0 编译安装mysql 5.6.22 再次总结 成功编译安装~ 越来越熟练了~

    查找php.ini文件所在位置 [root@localhost /]# find -name php.ini ./usr/etc/php/etc/php.ini mysql官网的安装说明http:// ...

  7. YII2数据库依赖缓存

    首先配置一下缓存,自己选择是用文件缓存还是数据库缓存等. 'cache' => [ 'class' => 'yii\caching\FileCache', ], 然后就可以通过 Yii:: ...

  8. hibernate 批量增加 修改 删除

    4.2  Hibernate的批量处理 Hibernate完全以面向对象的方式来操作数据库,当程序里以面向对象的方式操作持久化对象时,将被自动转换为对数据库的操作.例如调用Session的delete ...

  9. Java中的char到底是多少个字节?

    貌似一个简单的问题(也许还真是简单的)但是却把曾经自认为弄清楚的我弄得莫名其妙 char在Java中应该是16个字节byte在Java中应该是8个字节char x = '编'; //这样是合法的,输出 ...

  10. Linux下vim查看文件名

    在vim下编辑时,有时候看不到文件名,不知道编辑的是那个文件,怎么呢,可以按照下面的方法试试. 查看文件名 在正常模式下: :f 或CTRL+G 查看文件的路径 用 :!pwd 可以看当前的详细路径. ...