Ajax的掌握



ajax:是前后端交互的重要手段或桥梁

    ##js交互

            1.人机:行为,事件

            2.数据:前后端,ajax

    ajax:a 异步,j:异步,a:and;x:xml=>json数据(服务端的数据)

 

    特点:无刷新加载页面,

          破坏了历史记录,网络优化SEO(爬虫读取是前端一开始展现的网站内容,

          不会爬JS引起的变化);

 

    组成:1.异步JS(事件)[请求成功事件]

         2.其他JS(处理解析数据)

         3.XML对象(前后端链接的载体)(XHR对象)

         4.数据(txt,html,json,xml)[必须都是字符,因为安全性]

var xhr = new XMLHttpRequest();
    xhr.open("get", url, true);[其中url应写绝对地址]
    xhr.onreadystatechange = function() {
        if(xhr.readyState == 4 && xhr.status == 200) {
            alert(xhr.responseText);
        }
    }
    xhr.send();
    //(xhr.readyState:0:客户端未做请求,1:前端收到请求,向后端发送,2:后端成功收到请求,分析,接受,3:解析相应代码内容,4:解析完成,可以在客户端调用)

 

 

封装ajax-get

document.onclick = function() {
        var url = "*****";
        ajaxGet(url, function(res) {
            alert(res);
        },{
            user:"123",
            pass:"123"
        })
    };

    function ajaxGet(url,cb,data) {
        //data是对象
        data = data || {};                  //解决bug,undefined不能被for,in
        //1.解析要发送的数据
        var str = '';
        for(var i in data) {
            str += `${i}=${data[i]}&`;
        }
        //2.拼接url
        var d = new Date();
        url = url + "?" + str + "__gjt=" + d.getTime();             //浏览器缓存导致不刷新后端改变内容,解决bug:欺骗浏览器,修改请求地址,但是需要后端不读取添加的数据,缺点:会降低性能,增加后端压力;
        //3.准备ajax过程
        var xhr = new XMLHttpRequest();
        xhr.open("get", url, true);
        xhr.onreadystatechange = function() {
            if(xhr.readyState == 4 && xhr.status == 200) {
                cb(xhr.responseText);
            }
        }
        xhr.send();
    }
   // !!!get发送:固定要求:在url身上拼接?字段名=字段值&字段名=字段值;

封装ajax-post:

function ajaxPost(url,cb,data) {
            //data是对象
            data = data || {};                  //解决bug,undefined不能被for,in
            //1.解析要发送的数据
            var str = '';
            for(var i in data) {
                str += `${i}=${data[i]}&`;
            }
            //(不存在浏览器缓存问题,所以不用加时间戳,也不用添加url的内容)
            //2.准备ajax过程
            var xhr = new XMLHttpRequest();
            xhr.open("post", url, true);
            xhr.onreadystatechange = function() {
                if(xhr.readyState == 4 && xhr.status == 200) {
                    cb(xhr.responseText);
                }
            }
            //3.发送前设置发送数据格式:表单格式
            xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
            xhr.send(str);
        }

Bug跨域问题:

ajax的跨域问题:不同源  是浏览器提出的,基于安全考虑        同源(同服务,同地址,同接口)

        例:localhost 和 127.0.0.1并不能访问拿到同一服务器下数据

        解决办法:JSONP

                    是程序员提出的,并不是官方支持的解决办法

                    因为js中script标签可以跨域引入

        jsonp的封装:(data是必传参数,其中有callback属性,属性值是后端返回值执行函数名,data中必须有columnName属性,其属性值为回调函数的名字[callback字段名])

function jsonp(url, callback, data) {
        var str = '';
        for(var i in data) {
            str += `${i}=${data[i]}&`;
        }
        url = url + "?" +str.slice(0,str.length-1);
        var script = document.createElement('script');
        script.src = url;
        document.body.appendChild(script);

        window[data[data.columnName]] = function(res){
            callback(res);
        }
    }

 

 

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值