一、发送请求

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. 将缓冲区的数字字符串转化成BCD码数据_INT PubNumericToBCDStr(_UCHR *pcNStr, _INT iNLen, _UCHR *pcBCDStr)

    INT PubNumericToBCDStr(_CHR *pcNStr, _INT iNLen, _CHR *pcBCDStr) { _UCHR *pN = pcNStr; _UCHR *pB = p ...

  2. request.getParameter()获取URL中文参数乱码的解决办法

    这个问题耽误好长时间,URL传中文参数出现乱码,就算首次使用request接收就添加 request.setCharacterEncoding("UTf-8"); 依然报错不误. ...

  3. headfirst设计模式(3)—装饰者模式

    序 好久没写设计模式了,自从写了两篇之后,就放弃治疗了,主要还是工作太忙了啊(借口,都是借口),过完年以后一直填坑,填了好几个月,总算是稳定下来了,可以打打酱油了. 为什么又重新开始写设计模式呢?学习 ...

  4. JMeter关联(正则表达式提取器)

    关联:与系统交互过程中,系统返回的内容,需要在接下来的交互中用到,如防止csrf攻击而生成的token. 从前一个请求中取,用Regular Expression Extractor 正则表达式提取器 ...

  5. JVM菜鸟进阶高手之路九(解惑)

    转载请注明原创出处,谢谢! 在第八系列最后有些疑惑的地方,后来还是在我坚持不懈不断打扰笨神,阿飞,ak大神等,终于解决了该问题.第八系列地址:http://www.jianshu.com/p/7f7c ...

  6. Java 网络 IO 模型

    在进入主题之前先看个 Java 网络编程的一个简单例子:代码很简单,客户端和服务端进行通信,对于客户端的每次输入,服务端回复 get.注意,服务端可以同时允许多个客户端连接. 服务端端代码: // 创 ...

  7. MMORPG战斗系统随笔(二)、浅谈场寻路Flow Field PathFinding算法

    转载请标明出处http://www.cnblogs.com/zblade/ 今天给大家带来一篇游戏中寻路算法的博客.去年,我加入一款RTS的游戏项目,负责开发其中的战斗系统,战斗系统的相关知识,属于游 ...

  8. oracle 行转列 列转行

    行转列 这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: with temp as( select 'China' nation ,'Guangzhou' city from du ...

  9. 51nod 1536不一样的猜数游戏 思路:O(n)素数筛选法。同Codeforces 576A Vasya and Petya's Game。

    废话不多说,先上题目. 51nod Codeforces 两个其实是一个意思,看51nod题目就讲的很清楚了,题意不再赘述. 直接讲我的分析过程:刚开始拿到手有点蒙蔽,看起来很难,然后......然后 ...

  10. An Introduction to Variational Methods (5.3)

    从之前的文章中,我们已经得到了所有需要求解的参数的优化分布的形式,分别为: ‍ 但是,我们从这些分布的表达式中(参见之前的文章),可以发现这些式子并不能够直接求解.这是因为各个参数之间相互耦合,从而导 ...