Ajax学习总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax学习总结相关的知识,希望对你有一定的参考价值。

ajax:Asynchronous javascript + XML的简写。用户只要触发某一个事件,在不刷新整个网页的情况下,异步求服务器端,更新服务器上的最新数据。
    XMLHttpRequest对象,是ajax技术的核心对象
在使用XHR对象时:
  A:先必须调用open()方法,open()方法中有三个参数,第一个是请求方式,第二个uRL,第三个是,同步或一部方式。open()方法是准备发送请求。
  B:在调用send()方法。发送请求。
  C:当请求发送到服务器端,服务器端做出响应,将响应的数据自动填充到XHR对象。
  D:接收到响应之后,第一步检查status属性值,确定响应已经成功返回。
1.get请求的异步、同步模式,get请求时的参数放在URL后边。
  (1)创建XMLHttpRequest对象var xhr = new XMLHttpRequest();
  (2).打开请求,设置这一次的请求xhr.open(请求方式,请求地址,是否异步);
    请求方式:get/post
    请求地址:url
    是否异步:true(异步)/false(同步)
  (3).发送请求xhr.send(null);
  参数:
    post请求时,将携带的参数放入send方法中
    get请求时,将携带的参数放在url的后面
  (4).处理请求结果
    同步处理结果:
      if(xhr.status == 200) {//成功
        alert(xhr.responseText);
      }else{//失败
        alert("请求失败,状态码:" + xhr.status + ",状态信息:" + xhr.statusText);
      }
    异步处理结果:通过onreadystatechange事件监听readyState属性的变化  
    xhr.onreadystatechange = function () {
      //判断readyState属性是否为4,4表示完成了请求
      if(xhr.readyState == 4) {
        //判断是否成功
        if(xhr.status == 200) {
          alert(xhr.responseText);
        }else{//失败
          alert("请求失败,状态码:" + xhr.status + ",状态信息:" +xhr.statusText);     
           }
        }
    }
2.post请求的异步、同步模式,post请求时参数放在send方法中。
    (1)创建XMLHttpRequest对象
      var xhr = new XMLHttpRequest();
    (2)打开请求
      xhr.open("post","ajax",true);
    (3).设置请求头,模拟表单进行提交
      xhr.setRequestHeader("content-type","application/x-www-form-urlencoded");
    (4)发送请求
      xhr.send("username=zhang&password=123456");
    (5)处理返回结果
      同步处理结果:
      if(xhr.status == 200) {//成功
        alert(xhr.responseText);
      }else{//失败
        alert("请求失败,状态码:" + xhr.status + ",状态信息:" + xhr.statusText);
      }
      异步处理结果:通过onreadystatechange事件监听readyState属性的变化 
      xhr.onreadystatechange = function () {
        //判断readyState属性是否为4,4表示完成了请求
        if(xhr.readyState == 4) {
          //判断是否成功
          if(xhr.status == 200) {
            alert(xhr.responseText);
          }else{//失败
            alert("请求失败,状态码:" + xhr.status + ",状态信息:" +xhr.statusText);
      
            }
          }
        }
3.封装ajax
<body>
    <div id="div1"></div>
</body>
<script>
    /*
      method : 请求方式:get/post
      url : 请求地址:url
      param : 请求参数:param
      asynch : 同步异步:asynch
      success:处理成功返回结果的函数
    */
  function ajax (obj) {
  //创建对象
  var xhr = new XMLHttpRequest();
  //判断,若是get请求,将参数拼接在url后面
  if(obj.method == ‘get‘) {
    //ajax?username=zhang&password=123456
    //url本身可能已经携带了一部分参数:ajax?username=zhang&
    obj.url += obj.url.indexOf("?") == -1 ? "?" : "&";
    obj.url += obj.param;
  }
  //打开请求:若是get请求,参数要放在url后面,所以先判断是哪种请求
  xhr.open(obj.method , obj.url , obj.asynch);
  //发送请求:若是post请求,则将参数放入send方法中,而且在发送请求之前要设置请求头
  if(obj.method == "post"){
    xhr.setRequestHeader("content-type","application/x-www-form-urlencoded"); 
    xhr.send(obj.param);
  }else {
    xhr.send();
  }
  //处理结果:若是异步,先判断readyState属性的状态
  if(obj.asynch){//异步
    xhr.onreadystatechange = function () {
    if(xhr.readyState == 4) {
      callback();
      }
    }
  }else {
    callback();
  }
  //将处理代码封装到单独函数中
  function callback() {
    if(xhr.status == 200) {
      obj.success(xhr.responseText);
    }else {
      alert("请求失败,状态码:" + xhr.status + ",状态信息:"+xhr.statusText);
      }
    }
  }
  /*
    将设置ajax请求的参数,放入一个json对象中,这样就不必必须对应参数的位置
  */
  var obj = {
    method : "get",
    url : "ajax",
    asynch : true,
    param : "username=zhang&password=123456",
    success : function (res) {//形参:用来接收请求成功以后的结果
      alert(res);//返回一个字符串,json串
      //将数据以下拉框的形式显示在页面上
      //将json串转为json对象
      var resObj = eval("(" + res + ")");
      console.log(resObj);
      //获取所有的下拉选项值
      var cuisines = resObj.cuisines;
      console.log(cuisines);
      //获取div元素
      var div = document.getElementById("div1");
      //创建一个select
      var sel = document.createElement("select");
      //sel.appendChild(new Option("--请选择--" , "-1"));
      //通过给options传入下标,来设置选项
      sel.options[0] = new Option("--请选择--" , "-1");
      //遍历数组
      for(var i=0; i<=cuisines.length-1; i++) {
        sel.appendChild(new Option(cuisines[i],cuisines[i]));
      }
      //将select放入div中
      div.appendChild(sel);
      }
    };
    ajax(obj);
</script>

以上是关于Ajax学习总结的主要内容,如果未能解决你的问题,请参考以下文章

Ajax简单学习总结

AjAX学习总结

对学习Ajax的知识总结

JavaScript学习总结12JS AJAX应用

旧知识打造新技术--AJAX学习总结

旧知识打造新技术--AJAX学习总结