ajax小心得

作者: 爱穿裤衩的小粗腿城 | 来源:发表于2016-12-28 14:48 被阅读90次

    神马是Ajax

    通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

    封装原生ajax函数

    type:传值方式get post。
    http://www.cnblogs.com/zhangpengshou/archive/2012/07/09/2583096.htmlRect机制
    uri:要访问的服务器的地址
    async:同步异步请求默认为异步操作若为同步操作,访问数据的时候,页面无法进行任何操作,呈现出一种假死状态;同步操作是相对安全的
    obj:(相当于jq中的data属性
    angular params:{}//get方式
    data:{}//post)传递一个json对象进去(后端规定传递的数据:传递给后端的值)
    fun:回调函数有返回数据时进行的操作

    function ajax(type,url,async,obj,fun){
      var str = "";
     /*循环遍历传进来的json对象(遍历json都是用for in循环key代表后端规定传递的数据,obj[key]代表传递给后端的值)*/
      for(var key in obj){
        str += key + '=' + obj[key]+'&';
        //拼接成类似uname=’admin’&upass=’123456’&
      }
      if(str!=""&&type=='get'){
      //uname=’admin’&upass=’123456’&结尾处多了个&去掉它
        url+="?"+str.substring(0,str.length-1);
        //如果是get方式发送一个空的字符串,send(str)
        str='';
      }
      var xhr;
      //兼容ie低版本7以下
      if(*window*.XMLHttpRequest){
        xhr=newXMLHttpRequest();
       }else{
        xhr=newActiveXObject('Microsoft.XMLHTTP')
       }
       //async异步执行向服务器发送请求open
       //基础配置信息open(method,uri,async)
      /*method*:请求的类型;GET或POST
       *url*:文件在服务器上的位置
       *async*:true(异步)或false(同步)*/
        xhr.open(type,url,async);
        xhr.send(str);//将请求发送到服务器。Get传递空Post传递str字符串
        xhr.onreadystatechange = function(){
        //创建信息返回0 配置信息返回 1 发送信息完成返回     2访问数据结束返回4
        /*xhr.statusHTTP协议状态码
        xhr.status==200访问资源路径正确并且结束成功正确
        xhr.status==304缓存路径
        xhr.status==400请求参数错误(参数传少了)
        xhr.status==404访问路径错误路(路径写错了)
        xhr.status==500后台服务器错误*/
        if(xhr.readyState==4&&xhr.status==200){
          //responseText 获得字符串形式的响应数据。
          var data=xhr.responseText;
          //异常处理机制
           try{
              //JSON.parse将JSON字符串转换为对象
             var e=JSON.parse(data);
            }catch(s){
             console.info(s); //抛出异常
            };
            fun(e);
        }
      }
    }
    

    调用ajax

    var url = "后端提供的网址",
    var obj = {
      upass:页面获取的用户名,
      upass:页面获取的密码,
    }
    ajax('get',url,true,obj,function(e){
      if(e.code==200&&e.data){
        alert('登陆成功');
        window.location=index.html';
        }else{
        alert('对不起我们服务器挂掉了');
      }
    })
    

    同源安全策略

    是网景公司提出的一个著名的安全策略,只有在域名端口协议相同时才进行访问;
    同源是指域名,协议,端口相同

    Jsonp跨域处理

    JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问。Callback回调函数~~~
    跨域原理:利用js构造一个script标签,把json的url赋给script的scr属性,把这个script插入到dom里,让浏览器去获取。

    function jsonp(url,data){
      var param='';
      for(var in data){
        param+=i+'='+data[i]+'&';
      }
      //跟ajax一样,获取url后的一串字符串
       url+='?'+param;
       var domScript = document.createElement('script');
      //创建一个script标签
      domScript.src=url;
      //给script标签添加地址,将script(带有src地址)插入到head中
      document.getElementsByTagName('head')[0].appendChild(domScript);
    }
    //测试访问的是360天气,传递值会返回城市天气等等数据
     var url="http://cdn.weather.hao.360.cn/api_weather_info.php";
     var data={app:'hao360',code:101011200,_jsonp:"weath"}
     jsonp(url,data);
     function weath(e) {
      var weathArr=e.weather;
      var dayWeath=[];
      var nightWeath=[];
      var dateArr=[]
      for(var i=0;i<weathArr.length;i++){
        var everyday=weathArr[i];
        dayWeath.push(everyday.info.day[2]);
        nightWeath.push(everyday.info.night[2]);
        dateArr.push(everyday.*date*.substring(5));
      }
    }
    //script标签引用的内容我们获取不到,则返回一个自动运行的函数;
    //由前端给后端传递函数名
    

    Jquery中的ajax

    常用方法
    load(url,[data],[callback])常用于远程将html代码插入dom元素中
    url:(必填)请求html页面的url地址、
    若data为空则为get方式传值,否则post方式
    如$(‘#demo’).load(‘text.html’)将text页面的内容加入到id为demo的div中,
    注意:load()方法 无论Ajax请求是否成功,只要当请求完成后,回调函数就被触发

    $.get(url,[data],[callback],[type])以get方式进行ajax请求
        Type:服务器端返回内容的格式(xml,html,script·,json,text)
        Callback函数
        function(e,textStatus){
          //e:返回的内容
          //请求数据返回的状态有success error
    }
    

    $.post()以post方式进行ajax请求
    Get方式跟post方式的区别get方式对传输的数据大小有限制(通常不能大于2kb),get方式请求的数据会被浏览器缓存起来,其他人可以从浏览器的历史记录中取得这些数据,安全性差。
    $.getJSON()用于加载json文件
    最麻烦但最正宗的方法:
    $.ajax(
    {
    type:’get’,
    url:’’,
    success:function(e){
    }
    }
    常用参数:url,type:请求方式(get/post),
    data:传json对象后者string字符串 建议传json对象 好理解一点;
    注意:
    1、如果在ajax外部获取ajax的数据,必须使用全局变量来进行定义
    2、ajax后添加进来的数据 如果 想绑定事件,一般使用事件委托jq的on()方法

    相关文章

      网友评论

        本文标题:ajax小心得

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