Ajax中与服务器的通信【发送请求与处理响应】
一、发送请求
Ajax中通过XMLHttpRequest对象发送异步方式的后台请求时。通常有两种方式的请求,一种是GET请求,另一种是POST请求。发送请求一般要经过4个步骤分别是:
(1)初始化XMLHttpRequest对象
(2)为XMLHt指定一个返回结果的回调函数,用于返回结果的处理
(3)创建一个与服务器的连接。指定发送的请求是GET还是POST且是否采用异步方式发送请求
(4)向服务器发送请求。
<script type="text/javascript"> function checkBrowerType(){
//第一步:初始化XMLHttpRequest对象
var http_request = false;
if(window.XMLHttpRequest){ //非IE浏览器; 在调用window.ActiveXObject将返回一个对象,或是null(如果返回一个对象则为true,返回null则为false)
http_request = new XMLHttpRequest(); //创建XMLHttpRequest对象 }else if(window.ActiveXObject){
try{
http_request = new ActiveXObject("Msxml2.XMLHTTP"); //创建XMLHttpRequest对象
}catch(e){
try{
http_request = new ActiveXObject("Microsoft.XMLHTTP"); //创建XMLHttpRequest对象
}catch(e){ }
}
}
if(!http_request){
alert("不能创建XMLHttpRequest对象实例");
return false;
}
//第二步:设置回调函数
http_request.onreadystatechange = getResult; //调用返回处理函数
/*
注意:如果XMLHttpRequest对象的onreadystatechange属性指定回调函数时,
不能指定要传递的参数。如果要指定参数可以使用以下方法:
http_request.onreadystatechange = function(){
getResult(param)
};
*/ //第三步:创建一个与服务器的连接,(请求采用GET或POST请求方式,以及是否采用异步方式)
http_request.open("GET",url,true);
//第四步:向服务器发送请求
http_request.send(null);
}
/*编写回调函数getResult()*/
function getResult(){ }
</script>
查看代码
小技巧:在建立与服务器的连接时,指定open(“method”,“url” ,async)中的url参数时,最好将一个时间戳追加到该url参数后面,这样可以防止因浏览器缓存结果而不能实时得到最新的结果。例如:可以这样指定url参数:String url="deal.jsp?nocache="+new Date().getTime();
二、处理服务器的响应
在处理服务器响应时需要通过XMLHttpRequest对象的onreadystatechange属性指定一个回调函数,用来处理服务器响应。在这个回调函数中,首先需要判断服务器的请求状态,保证请求已经完成;然后根据服务器的HTTP状态码,判断服务器对请求响应是否成功,如果成功,则获取服务器的响应反馈给客户。
XMLHttpRequest中提供了两种访问服务器响应的属性:一个是responseText属性,返回字符串响应;另一个是responseXML属性,返回XML响应。
(1)处理字符串响应
例如:
function getResult(){
if(http_request.readyState == 4){ //判断请求状态
if(http_request.status == 200){ //请求成功,开始处理返回结果
alert(http_request.responseText); //显示判断结果
}else{
alert("请求的页面有错误!");
}
}
}
(2)处理XML响应
如果在服务器端需要生成特别负责的响应,则就要应用XML响应。
例:保存图书信息到XML文档中,并且使用回调函数将XML中的信息读取出来。
①XML中的图书信息,代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<mr>
<books>
<book>
<title>Java Web程序开发</title>
<publisher>人民邮电出版社</publisher>
</book>
<book>
<title>Java从入门到精通</title>
<publisher>人民邮电出版社</publisher>
</book>
</books>
</mr>
②在回调函数中遍历保存图书信息的XML文档,并将其显示到页面中,代码如下:
<script type="text/javascript">
function getResult(){
//判断请求状态
if(http_request.readyState == 4){
//请求成功,开始处理响应
if(http_request.status == 200){
var xmldoc = http_request.responseXML;
var str = "";
for(int i=0;i<xmldoc.getElementsByTagName("book").length;i++){
var book = xmldoc.getElementsByTagName("book").item(i);
str = str + "《"+book.getElementsByTagName("title")[0].firstChild.data + "》 由“"
+book.getElementByTagName("publisher")[0].firstChild.data + "” 出版<br>";
}
document.getElementById("book").innerHTML = str; //显示图书信息
}else{
alert("请求的页面有错误!");
} }
}
</script>
<div id="book"></div>
Ajax中与服务器的通信【发送请求与处理响应】的更多相关文章
- Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果
Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...
- javascript实现select菜单/级联菜单(用Rails.ajax实现发送请求,接收响应)
在购物网站,填写收货地址的时候,会出现XX省XX市XX区的下拉菜单,如何实现此功能?思路是什么? 功能设置: 当选择省select菜单后,市的select菜单为这个省的城市列. 当选择市菜单后,区菜单 ...
- Android HTTP实例 发送请求和接收响应
Android HTTP实例 发送请求和接收响应 Android Http连接 实例:发送请求和接收响应 添加权限 首先要在manifest中加上访问网络的权限: <manifest ... & ...
- 使用HttpClient发送请求、接收响应
使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1.创建HttpClient对象. CloseableHttpClient httpclient = HttpClients.c ...
- 前端ajax中运用post请求和get请求之于session验证
首先我们来看下ajax两种请求的区别: Ajax中POST和GET的区别Get和Post都是向服务器发送的一种请求,只是发送机制不同. 1. GET请求会将参数跟在URL后进行传递,而POST请求则是 ...
- AJAX中使用post,get接收发送数据的区别
如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...
- ajax的get 和post方式发送请求
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- consumer发送请求,接收响应
一般情况,consumer发送请求时,创建一个DefaultFuture对象,然后阻塞并等待响应.DefaultFuture类,封装了请求和响应: // 省略其他代码 public class Def ...
- 服务器获取浏览器发送请求中的cookies,选取自己需要的cookie
String cookieName = “userID”; // 设置自己需要的cookie名 Cookie cookies[] = request.getCookies(); // 获取请求中的所有 ...
随机推荐
- 上传文件复用代码【fileUpload】
这是使用了FileUpload上传组件的,解决了中文乱码问题了,并且删除了临时文件的. 使用了一个Book对象做示范 private Book uploadData(HttpServletReques ...
- 交互模式下测试python代码及变量的四则运算
在交互模式下,python代码可以立即执行,所以这很方便我们进行代码测试 1.命令窗口,输入python (如果没配置环境变量则需带python安装目录的绝对路径) >>> 这个就是 ...
- 常见注入手法第一讲EIP寄存器注入
常见注入手法第一讲EIP寄存器注入 博客园IBinary原创 博客连接:http://www.cnblogs.com/iBinary/ 转载请注明出处,谢谢 鉴于注入手法太多,所以这里自己整理一下, ...
- wget下载整个网站
wget下载整个网站wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps , -r 表示递归下载,会下载所有的链接,不过要注意的 ...
- 详解AngularJS中的依赖注入
点击查看AngularJS系列目录 依赖注入 一般来说,一个对象只能通过三种方法来得到它的依赖项目: 我们可以在对象内部创建依赖项目 我们可以将依赖作为一个全局变量来进行查找或引用 我们可以将依赖传递 ...
- Hadoop安全(1)——————美团Hadoop安全实践
http://tech.meituan.com/hadoop-security-practice.html 前言 在2014年初,我们将线上使用的 Hadoop 1.0 集群切换到 Hadoop 2. ...
- 【专章】dp基础
知识储备:dp入门. 好了,完成了dp入门,我们可以做一些稍微不是那么裸的题了. ----------------------------------------------------------- ...
- poj3468树状数组的区间更新,区间求和
A Simple Problem with Integers Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 47174 ...
- Button标签自动刷新问题
在form表单中,button标签在IE浏览器 type类型默认是button ,而在其他浏览器默认是submit. 解决方法1: 设置类型type="button" <bu ...
- Chrome Extension in CLJS —— 搭建开发环境
前言 磨刀不误砍柴工,本篇将介绍如何搭建Chrome插件的ClojureScript开发环境. 具体工具栈:vim(paredit,tslime,vim-clojure-static,vim-fir ...