«

JS AJAX

时间:2023-3-1 22:19     作者:wen     分类: F2E


<script type="text/javascript">
    /*ajax*/
   /*AJAX是异步的JavaScript和xml之间进行交流的技术,换而言之:JavaScript和服务器进行数据交互的一门技术
      xml 是可扩展标记语言,标签都是自己定义
      html 的标签是w3c组织定义好的,不能自己定义
      区别:
         html用来在浏览器显示内容的
         xml用来浏览器和服务器交互时,传输数据的
   响应数据
   responseText:获得字符串形式的响应数据
   responseXML:获得XML形式的响应数据
   //请求数据
   open(method,url,async);
      //mmethod:请求类型,GET或POST
      //url 文件在服务器上的位置
      //async: true(异步)或false(同步)
   send(string) 将请求发送到服务器
      //string:仅用于POST请求
   通过ajax对象的readyState属性,检查发生请求的状态
   0 请求未初始化: open()之前
   1 已建立连接: open()之后
   2 请求已发送: send()之后
   3 请求处理中
   4 请求已完成
   通过ajax对象的status属性,检查是否发生成功
   200表示请求成功
   404表示未找到请求的文件*/
   //兼容性处理
   try{
      var xhr = new ActiveXObject("Msxml2.XMLHTTP"); //IE
   }catch(e){
      console.log(e);
      var xhr = new XMLHttpRequest(); //主流浏览器
   }
   //get提交
   xhr.open('get','1.php'); //建立和服务器的链接
   xhr.send(); //发送请求
   object.onreadystatechange = function(){ //监视请求进度
      if(xhr.readyState == 4 && ajxhrax.status == 200){
         //请求成功
         var result = xhr.responseText; //返回数据
         alert(result);
      }
   }
     /*测试*/
    try{
        var xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        var xhr = new XMLHttpRequest();
    }
    //post提交
    xhr.open('POST','http://localhost/index.php',true);
    //post提交需要加上
    xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
    var data = '{nam:zhangsan&age:23}';
    xhr.send(data);

    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status ==200){
            document.write(xhr.responseText);
        }
    }
   //get,post的区别
   /*1.给服务器传递的数据量
      每个浏览器的限制不一样,大部分浏览器是2k,Chrome是8k
      post原则上是没有限制,php.ini对其限制为8M
   2.安全性
      get方式在url地址栏传递参数,安全性不如post高
   3.传递数据的形式
      get方式在url地址后边以请求字符串形式传递参数
      post方式是以form表单的形式传递给服务器
   4.get方式缓存
      get方式由于是url地址栏请求,如果url地址没有变化有些浏览器就认为同一次请求,就读取浏览器缓存的内容
   注意:不管get,post请求,如果携带的参数含有特殊字符(=,&,?等)都要先编码在传递,如果get方式请求,对中文也要编码
   var content = encodeURIComponent("love&hate"); //url字符转码
   //序列化
   服务器通过echo回应数据
   如果回应的数据是数组的话,就不行了
   需要先将数组序列化然后再回应给客户端:
      echo json_encode();
   客户端接收数据之后,是一个{}格式的字符串
   需要解析成对象
    eval()
    eval('var obj ='+xhr.responseText)
        console.log(obj);*/
    /*服务器返回xml格式的数据*/
    try{
        var xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        var xhr = new XMLHttpRequest();
    }
    xhr.open('get','http://localhost/test/test.xml',true);
    xhr.setRequestHeader('content-type','application/x-www-form-urlencoded');
    //var data = 'name=zhansan&age=23';
    xhr.send();
    xhr.onreadystatechange = function(){
        if(xhr.readyState == 4 && xhr.status ==200){
           var xml = xhr.responseXML;
           console.log(xml);
           var student = xml.childNodes[0];//获取元素的集合
           console.log(student);
           var class2 = student.getElementsByTagName('class2')[0];
           console.log(class2);
           var score = class2.getElementsByTagName('score')[0];
           console.log(score);
           //最后一点和解析HTML文档不一样,获得标签里面的内容在xml文件中通过nodeValue属性获得
            //内容也是内容节点,所以想获得内容的话:firstChild的nodeValue属性来获得
           console.log(score.firstChild.nodeValue);
        }
    }
    /*test.xml
    <\?xml version="1.0" encoding="utf-8" ?>
   <student>
       <class1>
           <name>xiaobai</name>
           <score>90</score>
       </class1>
       <class2>
           <name>xiaobai</name>
           <score>90</score>
       </class2>
   </student>*/
   //表单序列化
   var oForm = document.getElementsByTagName('form')[0];
   var form = new FormDate(oForm);

   function serialize(form) {
        var formData = new FormData(form),
            getValue = formData.entries(),
            parts = [];
        for (var pair of getValue) {
            parts.push(pair[0] + "=" + pair[1]);
        }
        return parts.join("&");
    }

   //文件编码临时修改
   $file = iconv('utf-8','gbk',filename)

   //ajax文件上传显示进度条
    xhr.upload.onprogress = function(e){
        var ev = e || window.event;
        var percent = Math.floor((ev.loaded/ev.total)*100);
        //将百分比显示到进度条
        $('parent').style.display = 'block';
        $('child').style.display = 'block';

        //将上传进度显示到child里面
        $('child').style.width = percent+'%';
        $('child').style.textAling = 'center';
        $('child').innerHTML = percent+"%";

        //如果到达100就隐藏
        if(percent){
            $('paren').style.display = 'none';
            $('child').style.display = 'none';
        }
    }
</script>

标签: javascript