美文网首页
ajax 异步请求

ajax 异步请求

作者: bigpeng个人博客 | 来源:发表于2018-07-08 20:25 被阅读4次

1.存在的一些问题?

  • 注册的时候,很多时候需要校验用户名是否重复,如果重复则不让注册。我们之前的做法是提交表单之后再到后台查询,验证。
  • 每次只想更新页面上部分内容,确要刷新整个页面。

2.什么是ajax
Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML)。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。

3.应用的场景

  • 百度的搜索提示
  • 表单的验证
  • 刷新页面局部内容
    。。。

4.如果使用
  4.1 js原生的写法
原生js 写ajax请求,主要依赖XMLHttpRequest 对象。
整个请求过程如下:
1) 创建XMLHttpRequest对象

//定义一个变量,初始值设为null
var xmlHttpRequest=null;
// 如果为IE6 及更低版本IE浏览器时
if(window.ActiveXObject){
    //实例化ActiveXObject对象并赋值给xmlHttpRequest
    xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
}
//IE6以上版本及其他浏览器
else if(window.XMLHttpRequest){
  //实例化XMLHttpRequest对象
  xmlHttpRequest=new XMLHttpRequest();
}

2) 调用XMLHttpRequest对象的open方法设置请求信息。

格式:open(method,url,async)

  • method:为请求方式,可以为get和post
  • url:请求地址(get请求时,传输的数据加载url后面。
  • async:是否异步请求,true为异步 ,false 为同步
if(xmlHttpRequest!=null){
    //get 方式
    xmlHttpRequest.open("get","/checkName?username=xxx&password=xxx",true);
   //post方式
   // xmlHttpRequest.open("post","/checkName",true);
}

3)调用XMLHttpRequest对象的send 方法发送请求

格式:send(dataString)

  • dataString: post请求数据。为get请求时不需要传(通过URL传输)。
//get 请求方式
xmlHttpRequest.send();
//post 请求方式
//设置为post表单数据 后台可通过request.getParameter();取到值
xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded");//此行必须有
xmlHttpRequest.send("username=xxx&&password=xxx");
//如果想要提交json格式数据,则如下设置。且后台取数据不能直接通过request.getParameter()取到,
//需要request.getInputStream()从流中读取。
 //设置请求头 请求数据类型为json
//xmlHttpRequest.setRequestHeader("content-type","application/json");//设置为json格式数据
//xmlHttpRequest.send("{'username':'xxx','password':'xxx'}");//发送请求post 传递参数

4)请求发送之后,需设定回调函数,用以接受返回数据,处理异常。
回调函数:onreadystatechange:当请求状态发生改变时,则会调用此方法。
readyState:xmlHttpRequest请求状态属性,有0-4五个值,分别意思为:

  • 0:请求未初始化
  • 1:服务器连接已建立
  • 2:请求已接受
  • 3:请求处理中
  • 4:请求已完成

status:http请求状态码

  • 200 :请求完成
  • 404 :请求地址错误
  • 500 :服务器程序异常
    ....
    responseText:请求返回数据。
xmlHttpReq.onreadystatechange=function(){
                //4代表执行完成,且请求状态码为200 则正确 
                if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {
                    //获取请求返回数据
                    var result=xmlHttpReq.responseText;
                    console.log("result"+result);
                }
            }

至此,js的ajax写法就介绍的差不多啦。完整代码如下:

function ajaxJS(){
        var xmlHttpReq=null;
        var username=$("#username").val();
        if(window.ActiveXObject){//如果是IE 6及以下版本IE浏览器
            xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");//实例化ActiveXObject 对象
        }else if(window.XMLHttpRequest){
            xmlHttpReq=new XMLHttpRequest();//实例化XMLHttpRequest对象
        }
        //如果实例化成功,就调用open方法设置请求的数据
        if(xmlHttpReq!=null){
            xmlHttpReq.open(
                "post",//请求方法 get or post
                //请求地址get 方式
             "<%=request.getContextPath()%>/checkName?username="+username,
              //请求地址 post方式
              //  "<%=request.getContextPath()%>/checkName",
                true //是否异步 true 为异步, false 为同步
            );
//            xmlHttpReq.send();//发送请求 get 不传递参数
        
//            //设置请求头 请求数据类型为json
            xmlHttpReq.setRequestHeader("content-type","application/json");//设置为json格式数据
            xmlHttpReq.send("{'username':'xxx','password':'xxx'}");//发送请求post 传递参数

            //设置为post表单数据
            xmlHttpReq.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xmlHttpReq.send("username="+username+"&password=123456");
            // onreadystatechange 回调函数
            //当请求状态改变时会调用该方法。
            //readyState :0:请求未初始化  1 服务器连接已建立 2 请求已接受 3 请求处理中 4 请求已完成
            // satatus 200 成功 404 路径错误 。。。
            xmlHttpReq.onreadystatechange=function(){
                console.log(xmlHttpReq.readyState);
                if (xmlHttpReq.readyState == 4 && xmlHttpReq.status == 200) {//4代表执行完成
                    var result=xmlHttpReq.responseText;
                  //后续代码处理  。。。。。
                }
            }
        }

    }

4.2 jquery ajax写法
通过上面的介绍可以看出,用js写ajax还是特别繁琐的。而jquery给我们提供了更为简单的方式。一般开发使用jquery居多。

  • $.ajax() 。jquery ajax 请求最原始的写法。(个人比较喜欢。直观)
$.ajax(
    type:"请求方式",//get or post 
    url:"请求地址",
    data:{},//请求数据,一般为json格式
    async:true/false,//是否异步,默认为true
    success:function(data){
                   },//成功回调函数
    error:function(){
            }//失败回调函数
);
  • $.post()
    post.png
$.post("<%=request.getContextPath()%>/checkUser",{username:xxx},function(data){
    //取到数据并做业务处理  
    if("1"==data){
        alert("用户名已存在");
    }
})
  • $.get()
get.png
$.get("<%=request.getContextPath()%>/checkUser",{username:xxxx},function(data){
    //取到数据并做业务处理  
    if("1"==data){
        alert("用户名已存在");
    }
});

相关文章

网友评论

      本文标题:ajax 异步请求

      本文链接:https://www.haomeiwen.com/subject/hgjduftx.html