A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

本帖最后由 大山哥哥 于 2017-5-19 19:46 编辑


【济南中心】如何实现BS系统的异步请求



        首先需要明白异步请求和同步请求的区别,具体可以参考下面的图:
       同步请求时,用户发送请求需要将当期页面整个刷新并请求后台数据,等后台数据返回到前端时才会展示出相应的结果,对用户来说这中间有一个时间段是中断的。异步请求时,只需要将部分数据提交到后台,并不刷新前端页面的数据,等响应过来数据时也只会刷新局部页面,对应用户的体验是不中断的,所以现在使用异步提交请求非常普遍。
       理解了这两个概念后我们就来看一下怎么样实现异步的请求。这里我们采用的即使是ajax这个技术。ajax需要使用一个核心对象:xmlhttp对象,这个对象的创建不同的浏览器有不同的方式,我们只需要把下面的创建xmlhttp对象的方法拷贝到对应的js文件中引用即可:
function createXmlHttp(){
  var xmlHttp;
  try{ // Firefox, Opera 8.0+, Safari
       xmlHttp=new XMLHttpRequest();
    }
   catch (e){
            try{// Internet Explorer
                  xmlHttp=newActiveXObject("Msxml2.XMLHTTP");
               }
             catch (e){
               try{
                  xmlHttp=newActiveXObject("Microsoft.XMLHTTP");
               }
               catch (e){}
               }
    }
         returnxmlHttp;
}
       打开ajax的API,我们需要使用xmlhttp对象的下面几个属性和方法。
    ajax的编写步骤如下:
       * 第一步:创建一个异步对象
       * 第二步:设置对象状态改变触发一个函数
       * 第三步:设置向后台提交的路径
       * 第四步:发送请求.
代码如下(创建异步对象的方法前面已经提供):
get方式如下:
function ajax_get() {
         //1.创建异步对象
         varxhr = createXMLHttp();
         //2.设置状态改变的监听回调函数.
         xhr.onreadystatechange= function(){
                   if(xhr.readyState== 4){ // 请求发送成功
                            if(xhr.status== 200){ // 响应也成功
                                     //获得响应的数据:
                                     vardata = xhr.responseText;
                                     alert(data);
                            }
                   }
         }
         //3.设置请求路径
         xhr.open("GET","/test/ServletDemo1?name=aaa&pass=123",true);
         //4.发送请求
         xhr.send(null);
}
post方式如下:
function ajax_post(){
         //创建异步对象:
         varxhr = createXMLHttp();
         //设置监听:
         xhr.onreadystatechange= function(){
                   if(xhr.readyState== 4){
                            if(xhr.status== 200){
                                     //获得响应的数据:
                                     vardata = xhr.responseText;
                                     alert(data);
                            }
                   }
         }
         
         //打开路径:
         xhr.open("POST","/test /ServletDemo1",true);
         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
         //发送请求:
         xhr.send("name=张三&pass=123");
}
       其中下面这几个属性具有这些意义:
       ①xhr. readyState这个属性有五个状态,我们只需要关心状态为4的时候表示数据接收完毕。②xhr.status的属性是用来获得相应的状态码,如200表示ok,404表示找不到资源等等,这里我们只关心200这个状态。③xhr.responseText表示获得响应的数据格式是普通文本格式,如果是responseXML则表示响应的数据格式是xml的格式。
       两个方法分别具有这些意义:
       ①xhr.open方法,表示异步去向服务器发送请求,有三个参数分别表示:请求方式、请求路径、是否异步。请求方式一般是get或者post,这样需要强调的是post这种方式还需要设置一个头:xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");,这个头用来处理POST请求方式的中文问题。请求路径就是请求的数据最终提交的地址。是否异步只需要设置为true即可。
        ②xhr.send方法里面是请求参数,如果是get方式提交直接设置为null,post方式提交设置的参数格式为:参数名=参数值,如果有多个中间用&隔开。如果是get方式传递参数,需要在open方法中的url后面手动进行拼接。


3 个回复

倒序浏览
哈哈哈~~~~~~~~~~
回复 使用道具 举报
666,已收藏
回复 使用道具 举报
很深奥的样子  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马