Ajax

Ajax:Asynchronous JavaScript and XML(异步JavaScript和XML)     用javascript异步的形式去操作xml    数据交互

  ----  节省用户操作,时间,提高用户体验,减少数据请求        传输获取数据

使用方法:

  1、创建Ajax对象

    IE6以下 new ActiveXObject('Microsoft.XMLHTTP');

    其余:new XMLHttpRequest();

    解决办法: 

      var xhr=null;
      if(window.XMLHttpRequest){
       xhr=new XMLHttpRequest();
      }else{
       xhr=new ActiveXObject('Microsoft.XMLHTTP');
      }
    在js里,用一个不存在的变量会出错,而用一个不存在的属性只会返回一个undefined

  2、在地址栏输入地址连接服务器

    open方法:open(打开方式,地址,是否异步);

      同步:阻塞  前面的代码会影响后面代码的执行

      异步:非阻塞 前面代码不会影响后面代码执行

  3、提交

     xhr.send();

    表单:数据的提交

      action:数据提交的地址,默认是当前页面

      method:数据提交的方式,默认是get方式

         1、get :把数据名称和数据值用=连接,如果有多个的话,那么他会把多个数据组合用&进行连接,然后把数据放到url?后面传到指定页面。

              容量低,安全性低,url长度的限制,不要通过get的方式传递过多的数据

              get用于获取数据,,可以缓存

         2、post :安全性一般,容量几乎无限(大)

              post用于上传数据(如用户注册),不会缓存

      enctype:提交数据格式,默认application/x-www-form-urlencoded  

  4、等待服务器返回内容

    onreadystatechange事件

      readyState属性:请求状态

        0 (初始化)还没有调用open()方法

        1(载入)已调用send()方法,正在发送请求

        2(载入完成)send()方法已完成,已收到全部响应内容

        3 (解析)正在解析响应内容

        4(完成)响应内容解析完成,可以在客户端调用了

      status属性:服务器(请求资源)的状态,是否获得成功,成功=200

        xhr.onreadystatechange=function () {
         if(xhr.readyState==4){
         if(xhr.status==200){
         alert(xhr.responseText);
         }else {
         alert("出错啦");
         }
         }
        }

    responseText:Ajax请求返回的内容存放到这个属性下面   类型都为String

    responseXML:返回XML形式的内容

    onreadystatechange:当readyState改变的时候触发

JSON:  

    (注意:JSON的key值必须用双引号)

    JSON.stringify():可以把一个对象转成对应的字符串

    JSON.parse():可以把字符串转成对应的对象

解决问题:

  1、解决缓存现象--------在url?后面连接一个随机数,时间戳

    xhr.open('get','index.php?username=xing&'+new Date().getTime(),true);

  2、乱码--------编码encodeURI()

    xhr.open('get','index.php?username='+encodeURI('星')+&'+new Date().getTime(),true);

  3、post方式,数据放在send()里面作为参数传递(post没有缓存问题)

    xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');//申明数据发送的类型

    send('username='xing'');

原文地址:https://www.cnblogs.com/yuxingyoucan/p/5730891.html