Ajax的问题(跨域)-创新互联

ajax往自己的域名访问是可以,如果向别的域名访问就会报错。
这一版是请求发过去了,服务器也给返回数据了,但是浏览器会给报错(浏览器遵:同源策略)。他的这个策略把ajax跨域发送请求时,再回来时候浏览器阻止了。

站在用户的角度思考问题,与客户深入沟通,找到工布江达网站设计与工布江达网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、网站建设、外贸营销网站建设、企业官网、英文网站、手机端网站、网站推广、申请域名虚拟主机、企业邮箱。业务覆盖工布江达地区。

JSONP

jsonp 就是钻空子,浏览器虽然禁止ajax跨域,但是允许script(src)的代码不禁止,可以把这个用jquery CDN的方法
使用方法:

  • 发送:--->>在自己的页面创建一个script标签,让它的src=‘http://baidu.com/?p=1’这样钻过去

https://www.cnblogs.com/xiaohuochai/p/6568039.html
这个博客写的非常好

跨站练习

环境设置

启动两个项目一个端口为8001,一个为8000,端口8001提供数据。通过8000端口的程序来获取8001提供的数据

8001的代码
from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
    print('请求来了。。。')
    user_list=[
        'zhang','wang','li','zhao'
    ]
    temp = json.dumps(user_list)
    return HttpResponse(temp)
8000的代码
def user(request):
    return render(request,'user.html')
<body>
<input type="button" value="获取信息" onclick="showdata();">
<div>
    <ul id="user_list">

    </ul>
</div>
<script>
    function showdata() {
        xhr = new XMLHttpRequest();
        xhr.onreadystatechange=function () {
            if(xhr.readyState==4){
                var content = xhr.responseText;
                console.log(content)
            }
        }
        xhr.open('GET','http://127.0.0.1:8001/user_jsonp/');
        xhr.send()
    }
</script>

</body>

这个时候两个项目启动起来后,8000页面点击获取来获取8001的数据时候是出错的(浏览器的同源策略)报错如下:
(index):1 Failed to load http://127.0.0.1:8001/user_jsonp/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8000' is therefore not allowed access.
这个就是同源策略阻止了ajax的访问。为了解决这个问题,我们可以送script的js的方式来解决
如下面的代码:

function showdata() {
        var tag = document.createElement('script');
        tag.src='http://127.0.0.1/8001/user_jsonp/';
        document.head.appendChild(tag)
    }

这里通过scirpt的方式已经跨过站了,数据已经存储到了内存中,下面我们如何从内存里面拿到8001的值那?如果这里有一个变量的换,我们是可以通过变量来获取的 ,通过这个思路,出现了下面的这个代码
数据端8001这边在返回的时候返回一个fun(xxx)这么类型的一个字段,前端来获取这个
8001代码:

from django.shortcuts import render,HttpResponse
import json
def user_jsonp(request):
    v = request.GET.get('funname')
    print('请求来了。。。')
    user_list=[
        'zhang','wang','li','zhao'
    ]
    # temp = json.dumps(user_list)
    user_list_str = json.dumps(user_list)
    temp = "%s(%s)"%(v,user_list_str)
    return HttpResponse(temp)

8000前端获取的8001的返回后,做如下处理

function showdata() {
        var tag = document.createElement('script');
        tag.src='http://127.0.0.1/8001/user_jsonp/?funname=bbb';
        document.head.appendChild(tag)#这里返回的是一个bbb(xx),然后bbb就会执行下面的bbb函数
    }
    function bbb(arg) {
        console.log(arg)
    }

现在大家默认函数会是callback

通过ajax 实现jsonp的方式

Ajax的问题(跨域)

jsonp只能通过get方式,你写了post,内部还是get请求。而且是双方约定的

cros跨站

http://www.cnblogs.com/wupeiqi/articles/5703697.html

cros 就是服务端返回的字符串带着一个字段,告诉浏览器不要阻止。

 简单请求:

            def new_users(request):
                obj = HttpResponse('返回内容')
                obj['Access-Control-Allow-Origin'] = "*"
                return obj
        复杂请求:
            def new_users(request):

                if request.method == "OPTIONS":
                    obj = HttpResponse()
                    obj['Access-Control-Allow-Origin'] = "*"
                    obj['Access-Control-Allow-Methods'] = "DELETE"
                    return obj

                obj = HttpResponse('asdfasdf')
                obj['Access-Control-Allow-Origin'] = "*"
                return obj
        其他:
            - 任何请求

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

文章题目:Ajax的问题(跨域)-创新互联
当前地址:https://www.cdcxhl.com/article0/dpggio.html

成都网站建设公司_创新互联,为您提供关键词优化网页设计公司企业网站制作服务器托管小程序开发网站改版

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

h5响应式网站建设