jsonp 解决同源机制

跨域问题

可以跨域的ajax

原理:

利用script标签src可以自带跨域。 通过创建一个script标签,并立即删除达到发送请求的效果。  
因为script标签发送的请求接收的内容会到script标签内部如:
返回值为func       运行结果为:<script>func</script>
返回值为func()   运行结果为:<script>func()</script>
都会报错。因为func 会被读取为变量。  怎么样解决呢?我们可以定义一个函数的函数名为func 并且 和后端沟通他的返回值为func()   这样就可以执行func()函数了
伪代码
    $('#btn').click(function () {
        定义一个func函数
        
        创建script 标签
        设置script标签的src为指定的src
        将script标签当在body即可
        删除script标签
        
        返回值沟通为func() 即执行函数
    }

ajax封装的jsonp的方法

    $.ajax({
        url:'http://192.168.40.138:8000/index/',
        type:'get',
        dataType:'jsonp',
        jsonp:'callbacks',	#传函数名的变量,后端request.GET.get('callbacks') 即可接收到函数名
        jsonpcallback:'func'  #自己定义的函数名,可不写。ajax会随机生成
        success:function (data) {
            alert(data)   #如定义函数名则没有回调函数,为自定义。反之则需要写
        }
        
原理即为伪代码。 这里函数名 为随机生成

后端view代码

class index(View):
    def get(self,request):
        ret=request.GET.get('callbacks') #获取
        return HttpResponse("%s('111')"%ret)

posted @ 2020-01-11 16:55  路一  阅读(116)  评论(0编辑  收藏  举报