ajax跨域

ajax跨域

  • xhr.open(“get”,“http://localhost:4000/getAjax”,true);

解决跨域问题:利用jaonp

jsonp 利用script标签的特性(浏览器在同源策略下允许script,img标签访问)解决跨域问题

但script标签出现的问题:

  • 1.后端返还数据时,不能使用对象,能够返还js代码,但大量的js代码在服务器是不太合理的
  • 2.端口号和参数无法灵活传递
< img src="http://i1.sinaimg.cn/IT/2010/0419/201041993511.jpg" alt="">
< script src="http://localhost:4000/getAjax">< /script>

动态创建script

  • 前端页面
    script标签出现的问题 的解决方法
    -1.把回调函数写到前端
function cbfn(res){
            console.log(res);
        }

2.动态创建

 let btn =document.querySelector("button");
        btn.onclick = function(){
            let post = 4000;
            let o = document.createElement("script");

            // o.src = `http://localhost:${post}/getAjax?cb=cbfn`;
            //这里把参数传递给后端
            o.src = "http://localhost:4000/getAjax?cb=cbfn";
            document.querySelector("head").appendChild(o);
            
            // console.log(a);
            o.onload =function(){
                console.log(a);
            }

        }
  • 后端页面
router.get("/getAjax",ctx=>{
    console.log("running....");   
    // ctx.body = "var a = 20";

    let obj = {
        name:"小了",
        age:20
    }
    //这里的cb 是前后端人员共同拟定的名字
   let cb = ctx.query.cb;
   console.log(cb);

   //cb(obj)   后端把数据放到这里传给前端
   ctx.body = `${cb}(${JSON.stringify(obj)})`;
})

封装的jsonp

-引入
< script src=“jsonp.js”>< /script>

< script>
let btn = document.querySelector(“button”);
function cbfn(res){
console.log(res);
}
btn.onclick = function(){
ajax({
url:“http://localhost:4000/getAjax”,
data:{
name:“张三”,
age:20
},
dataType:“jsonp”,
jsonp:“cb”,
success:function(res){ // 请求完成之后触发的函数
console.log(res);
}
});
}
< /script>

百度jsonp练习
< h1>百度搜索< /h1>
    < input type="text" class="myInput">
    < div class="exchange">< /div>

    <script>

        document.querySelector(".myInput").onblur = function(){
            ajax({
                url:"https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su",
                dataType:"jsonp",

                //路径里 ?之后的参数,全部写在data数据中
                data:{
                    wd : this.value
                },
                success:function(res){
                    console.log(res);
                    let data = res.s;
                   
                   //组装到页面
                    let html = "<ul>"
                    data.forEach(v=> {
                        html += "<li>" + v + "</li>";
                    });
                    html += "</ul>";
                    document.querySelector(".exchange").innerHTML = html;
                }
            })
        }
    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值