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(); // 获取请求中的所有 ...
随机推荐
- 如何用SQL实现组内前几名的输出
关于问题 如何查询组内最大的,最小的,大家或许都知道,无非是min.max的函数使用.可是如何在MySQL中查找组内最好的前两个,或者前三个? 什么是相关子查询 在提出对于这个问题的对应方法之前,首先 ...
- SQL基础巩固
1.一定要记住,SQL 对大小写不敏感! 2.分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句. 如果您使用的是 MS Access 和 SQL ...
- CacheConcurrencyStrategy五种缓存方式
CacheConcurrencyStrategy有五种缓存方式: CacheConcurrencyStrategy.NONE,不适用,默认 CacheConcurrencyStrategy.REA ...
- 基于FPGA的腐蚀膨胀算法实现
本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...
- OC——关于KVO
我们知道在WPF.Silverlight中都有一种双向绑定机制,如果数据模型修改了之后会立即反映到UI视图上,类似的还有如今比较流行的基于MVVM设计模式的前端框架,例如Knockout.js.其实在 ...
- .NET Excel导出方法及其常见问题详解
摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...
- Markdown 编写规范
说明及目的 作为一个在博客园混迹了俩三年的人,一直在这里看别人的博客,现在准备开始写自己的博客,目的呢,就是一下几点吧: 项目过程中的历史经验教训积累记载,吃一堑长一智,不想在同一个坑掉进去好几次 学 ...
- 【NOIP】OpenJudge - 15-03:雇佣兵
#include<stdio.h>//雇佣兵 int main() { ; scanf("%d%d%d",&M,&N,&X); n=N; m=M ...
- centos crontab(定时任务) 使用
一.介绍 crontab命令的功能是在一定的时间间隔调度一些命令的执行.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会 ...
- 机器学习理论提升方法AdaBoost算法第一卷
AdaBoost算法内容来自<统计学习与方法>李航,<机器学习>周志华,以及<机器学习实战>Peter HarringTon,相互学习,不足之处请大家多多指教! 提 ...