一、发送请求

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中与服务器的通信【发送请求与处理响应】的更多相关文章

  1. Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果

    Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...

  2. javascript实现select菜单/级联菜单(用Rails.ajax实现发送请求,接收响应)

    在购物网站,填写收货地址的时候,会出现XX省XX市XX区的下拉菜单,如何实现此功能?思路是什么? 功能设置: 当选择省select菜单后,市的select菜单为这个省的城市列. 当选择市菜单后,区菜单 ...

  3. Android HTTP实例 发送请求和接收响应

    Android HTTP实例 发送请求和接收响应 Android Http连接 实例:发送请求和接收响应 添加权限 首先要在manifest中加上访问网络的权限: <manifest ... & ...

  4. 使用HttpClient发送请求、接收响应

    使用HttpClient发送请求.接收响应很简单,只要如下几步即可. 1.创建HttpClient对象.  CloseableHttpClient httpclient = HttpClients.c ...

  5. 前端ajax中运用post请求和get请求之于session验证

    首先我们来看下ajax两种请求的区别: Ajax中POST和GET的区别Get和Post都是向服务器发送的一种请求,只是发送机制不同. 1. GET请求会将参数跟在URL后进行传递,而POST请求则是 ...

  6. AJAX中使用post,get接收发送数据的区别

    如何发起请求 xhr.send(); 备注: 如果是get方式,send()命令中不用写任何参数 传递的数据可以写在url中,服务器用$_GEET["参数名"]接收 如果是post ...

  7. ajax的get 和post方式发送请求

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  8. consumer发送请求,接收响应

    一般情况,consumer发送请求时,创建一个DefaultFuture对象,然后阻塞并等待响应.DefaultFuture类,封装了请求和响应: // 省略其他代码 public class Def ...

  9. 服务器获取浏览器发送请求中的cookies,选取自己需要的cookie

    String cookieName = “userID”; // 设置自己需要的cookie名 Cookie cookies[] = request.getCookies(); // 获取请求中的所有 ...

随机推荐

  1. 如何用SQL实现组内前几名的输出

    关于问题 如何查询组内最大的,最小的,大家或许都知道,无非是min.max的函数使用.可是如何在MySQL中查找组内最好的前两个,或者前三个? 什么是相关子查询 在提出对于这个问题的对应方法之前,首先 ...

  2. SQL基础巩固

    1.一定要记住,SQL 对大小写不敏感! 2.分号是在数据库系统中分隔每条 SQL 语句的标准方法,这样就可以在对服务器的相同请求中执行一条以上的语句. 如果您使用的是 MS Access 和 SQL ...

  3. CacheConcurrencyStrategy五种缓存方式

    CacheConcurrencyStrategy有五种缓存方式:  CacheConcurrencyStrategy.NONE,不适用,默认  CacheConcurrencyStrategy.REA ...

  4. 基于FPGA的腐蚀膨胀算法实现

    本篇文章我要写的是基于的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,,腐蚀在二值图像的基础上做"收缩"或"细化"操作,膨胀在二值图像的基础上做" ...

  5. OC——关于KVO

    我们知道在WPF.Silverlight中都有一种双向绑定机制,如果数据模型修改了之后会立即反映到UI视图上,类似的还有如今比较流行的基于MVVM设计模式的前端框架,例如Knockout.js.其实在 ...

  6. .NET Excel导出方法及其常见问题详解

    摘要:.NET Excel导出方法及其常见问题详解. 一.Excel导出的实现方法 在.net 程序开发中,对于Excel文件的导出我们一共有三种导出方式: 利用文件输出流进行读写操作 这种方式的导出 ...

  7. Markdown 编写规范

    说明及目的 作为一个在博客园混迹了俩三年的人,一直在这里看别人的博客,现在准备开始写自己的博客,目的呢,就是一下几点吧: 项目过程中的历史经验教训积累记载,吃一堑长一智,不想在同一个坑掉进去好几次 学 ...

  8. 【NOIP】OpenJudge - 15-03:雇佣兵

    #include<stdio.h>//雇佣兵 int main() { ; scanf("%d%d%d",&M,&N,&X); n=N; m=M ...

  9. centos crontab(定时任务) 使用

    一.介绍   crontab命令的功能是在一定的时间间隔调度一些命令的执行.当安装完成操作系统之后,默认便会启动此任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会 ...

  10. 机器学习理论提升方法AdaBoost算法第一卷

    AdaBoost算法内容来自<统计学习与方法>李航,<机器学习>周志华,以及<机器学习实战>Peter HarringTon,相互学习,不足之处请大家多多指教! 提 ...