码迷,mamicode.com
首页 > 数据库 > 详细

关于Access Control Allow Origin错误的问题

时间:2015-03-11 17:18:16      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:json   access-control-allow   jsonp   

前天第一次使用jquery向服务器发送Get请求。结果吸拜了...查看console提示说"No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘null‘ is therefore not allowed access.",嗯好吧,google了一下才知道是跨域问题。

跨域访问:AJAX 跨域访问是用户访问A网站时所产生的对B网站的跨域访问请求均提交到A网站的指定页面 ——百度百科

还有搜了一些文章,我的理解就是javaScript有同源策略限制,js文件只能操作获得 同域名,同端口 的数据。所以当我在本地打开html,向服务器发出请求的时候,一开始它是拒绝的~ 把自己写的html 文件放到服务器上打开就没问题。

(这样岂不是很麻烦,每次修改点什么东西都要往上提交一下才能测试??? )

还好jQuery封装了JSONP的功能。

关于JSONP(JSON with Padding)


注意JSON和JSONP差别很大! json是一种轻量级数据格式,而jsonp可以理解成一种协议。上面提到javaScript有同源策略,但是对某些标签却造不成物理伤害(script、iframe、img、等带src属性的标签)。而JSONP的核心就是使用script标签来调用服务器提供的js脚本,而JSON对Javascript原生支持,所以JSONP就是把得到的JSON数据当成JavaScrip对象,这样就不存在跨域问题了。

JSONP使用方法


JavaScript演示

    // 服务器返回结果后调用的函数
    var callback = function(data){
        console.log(data);
    };
    // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
    var url = "http://yoururl.com";
    // 创建script标签,设置其属性
    var script = document.createElement(‘script‘);
    script.setAttribute(‘src‘, url);
    // 把script标签加入head,此时调用开始
    document.getElementsByTagName(‘head‘)[0].appendChild(script); 

jQuery演示

$.ajax({
        type: "get",
        url:"http://yoururl.com",
        dataType: "jsonp",
        data: {
        },
        //服务器返回后直接调用success 函数,就不用我们自己定义callback了。
        success: function(object) {
            console.log(object);
        }
})

推荐阅读:


关于Access Control Allow Origin错误的问题

标签:json   access-control-allow   jsonp   

原文地址:http://blog.csdn.net/joueu/article/details/44200255

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!