jsonp

同源策略

+ 同源策略主要是为了安全性
              => 协议:http https ftp
              => 域名:www.baidu.com www.jd.com
              => 端口:80 8080 40等等
              => 只要其中有一个不相同我就不让你访问
              => 同源政策的目的,是为了保证用户信息的安全,防止恶意的网站窃取数据。
            同源策略给前端带来的问题
            + 例如:百度、京东、淘宝这些大公司下面有很多的子公司,每一个公司都有自己的网站,不同的网站是放在不同的服务器上面的,
            根据同源策略来讲,只有有一个不相同都访问不了,问题是公司都是属于一个总公司资源要共享,共享不了的
            + 百度公司
              => https://www.baidu.com/ 百度首页
              => http://news.baidu.com/ 百度新闻
              => https://tieba.baidu.com/index.html 百度贴吧
              => 很多都不满足同源策略的条件,需要共享数据,解决方案是需要进行跨域
            跨域
            + 域,根据同源策略来说不同网站之间不能相互访问
            + 为了解决访问问题,有人提出跨域
        */
       //http://localhost/SecondStage/day25/code/data/hello.php
       //注意点:ajax技术受同源策略影响,不同域的地址访问不了的
       pAjax({
           url: 'http://127.0.0.1/kuayu/day25/code/data/hello.php'
       }).then((res)=>{
            console.log(res)
       })
<!--
        地址
        + https://img1.baidu.com/it/u=1875739781,4152007440&fm=253&fmt=auto&app=120&f=JPEG?w=1024&h=576
        + http://localhost/SecondStage/day25/code/03-jsonp.html
        + 思考:通过地址对比,发现没有一项可以满足同源策略的需求的,应该访问不了才对
          => 规则:在html里面src属性,比较特殊可以不受同源策略影响,可以进行跨域访问
          => 哪些标记上面有src属性,img、script
        script标记上的src属性
        + 不受同源策略影响
        + 可以把引入地址返回的结果无论是什么都会以js代码的形式进行解析
        + src属性确实可以向服务器发送请求,也可以接收服务器返回的请求
        + jsonp跨域的原理:就是利于了script上面的src不受同源策略影响
        + 注意点:jsonp接收的请求,默认把json格式转成js对象形式,让咱们使用
    -->
    <img src="https://img1.baidu.com/it/u=1875739781,4152007440&fm=253&fmt=auto&app=120&f=JPEG?w=1024&h=576" alt="" width="500">
    <!--框架集标记,在一个网页中可以引入另一个网站,以框形式显示-->
    <!-- <iframe src="https://www.jd.com"></iframe> -->
    <!-- <script src="data/hello.txt"></script> -->

    <script src="data/hello.php"></script>
    <script>
        //问题:没有办法把数据获取到,处理业务逻辑?

<script>
        //思路:后端可以把前端代码返回并执行,给后端传递一个函数名称,让在返回数据的时候执行函数
        // function fn(res){
        //     console.log(res)
        // }

        // function fn(res){
        //     console.log('看我能不能执行')
        //     console.log(res.code)
        // }
        function fn(res){
            console.log('看我能不能执行')
            console.log(res.code)
        }
    </script>
    <script src="data/hello.php"></script>
<!--ajax和jsonp都是发送和接收信息的技术,jsonp可以跨域-->
    <!--注意点:并不是每一次都需要告诉后端咱们函数名称是什么,因为太麻烦,所以可以通过传递参数解决这个问题-->
    <script>
        //思路:后端可以把前端代码返回并执行,给后端传递一个函数名称,让在返回数据的时候执行函数
        // function fn(res){
        //     console.log(res)
        // }
        
        function jsonp(url){
            //先创建一个script标记
            let script = document.createElement('script')
            //把地址赋值
            script.src = url
            //把创建的标记放body标记里面
            document.body.appendChild(script)
        }

        function fn(res) {
            console.log('看我能不能执行')
            console.log(res.code)
        }
        jsonp('data/hello.php?cb=fn')
        
    </script>
    <!--cb--callback回调函数-->
    <!-- <script src="data/hello.php?cb=sb"></script> -->
搜索功能
<input type="text" placeholder="请输入要搜索的内容">
    <ul></ul>
    <script src="js/jsonp.js"></script>
    <script>
        let container = document.querySelector('ul')
        let search = document.querySelector('input')
        function fn(res){
            container.innerHTML = ''
            res.s.forEach((item)=>{
                container.innerHTML += `
                    <li>${item}</li>
                `
            })
        }
        //当咱们输入内容的时候触发这个事件,发送请求返回内容
        onkeyup = ()=>{
            container.innerHTML = ''
            let wd = search.value
            if(wd.trim().length == 0){
                container.innerHTML = ''
                return
            }
            jsonp(`https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?cb=fn&wd=${wd}`)
        }

cors跨越

<?php
    header("Access-Control-Allow-Origin: *");//允许所有地址跨域请求
ajax load方法

<script>
        let xhr = new XMLHttpRequest()
        xhr.open('get', 'data/hello.php')
        xhr.send()
        //这是ajax新增的一个事件,当所有的请求完成后把结果直接返回给咱们
        xhr.onload = ()=>{
            console.log(xhr.response)
        }
    </script>
浏览器同源策略
            + 浏览器为了安全,规定不同的协议、域名、端口其他有一个不一样,禁止访问
            + 跨域
              => jsonp,利于script上的src属性不受同源策略的影响,通过它替代ajax发送请求
              => cors,在后端设置请求头方式
            + 问题 
              => 有些接口,协议、域名、端口号都不一样,但是不受同源策略影响
              => 一些免费的接口,其实是被后端处理过的,使用ajax技术也可以正常发送请求和接收请求
            + 发送请求方式
              => form,action submit事件
              => ajax,XML、http、request结合
              => jsonp,利于script上的src属性不受同源策略的影响,通过它替代ajax发送请求
            + Promise 
              => 承诺,解决回调地狱问题
              => then()
              => catch()
              => finally()
              => all()
              => race()
            + async/await 
              => 回调地狱终极解决方案
              => async异步
              => await等待
              => 把咱们的异步回调代码改成了同步代码那样执行
              => 注意点:只是把书写方式改变了,异步本质没有改变
              => 注意点:浏览器是一个单线程的,一次只能做一件事情,如果只是按着同步方式写代码,会造成代码阻塞
            + bootstrap前端框架
              => 有一些现成的样式和js效果让咱们它的规则,快速实现开发
              => 实现响应式开发,栅格系统,分为12列,实现响应式的原理是通过css3里面的媒体查询语法
              => 其实给咱们通过class选择器,内置了很多的默认样式,通过class选择器来给标记设置对应的类名
            + 前后端交换
              => 后端代码只需要看懂就行
              => 对应的修改后端代码,库名、表名、传递过去的参数的名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值