zoukankan      html  css  js  c++  java
  • 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)
    
    
  • 相关阅读:
    Matching「CEOI2011」
    中位数之中位数「NOIP多校联考 2019」
    积木「CSP-S全国排位赛第一场」
    序列「CSP-S全国排位赛第一场」
    GT考试「HNOI2008」
    动物园「NOI2014」
    Radio Transmission「BOI2009」
    小Z的袜子「国家集训队」
    BZOJ3624: [Apio2008]免费道路
    BZOJ1190: [HNOI2007]梦幻岛宝珠
  • 原文地址:https://www.cnblogs.com/luyi84895838/p/12180403.html
Copyright © 2011-2022 走看看