美文网首页
解决跨域问题 No 'Access-Control-Origin

解决跨域问题 No 'Access-Control-Origin

作者: IronMan999 | 来源:发表于2019-07-13 11:36 被阅读0次

    阿里云服务器3折开售(点此直达)

    image
    最近调试一个第三方的股票K线的接口,将请求这个接口的工作放到用户这边,减轻自己服务器的压力。

    当访问第三方网站时,使用Jquery 出现了如下错误。

    报错信息:

    mark timg.jpg

    我一看这,容易解决啊。经典的,需要解决服务器 不能通过 跨越请求的方式 访问数据。

    既然,咱不能改人家第三方服务器的 代码,自己的代码总可以改吧。

    注意:

    • 不能使用 .post或者.get或者$.getJSON的任何方式,都不行。

    • 必须,使用 ajax 设置dataType为 jsonp的解决方式,可以完美解决这个问题。

    可是使用 ajax进行请求的时候,依然不行,为此,我还设置了一下headers 头信息。可还是不行。好不容易,找到了正确的打开方式了吧。这尼玛,又不走默认的 success方法了。。。


    头疼.jpg

    好在最后耐心研究了一通,被我解决掉了。

    对此的总结如下:
    如果不设置 dataType为 jsonp 的话,按照网上的教程,给 ajax添加 headers 的话,请求方式即便声明了 get ,也不好使。而且还会出现 请求变成 OPTION 的情况。
    这时候,如果服务器再声明的是 只接受 get 请求的话,服务器会直接返回 405,method not allowed 的错误。

    中心思想是 ,通过JSONP的方式

    ajax jsonp.png

    使用如下代码:(我把代码贴出来,省的宝宝们再去一个个抄了)

    $.ajax({
        type: "get",
        url: $minute_url,
        dataType:'jsonp',
        jsonp: "callback",
        jsonpCallback: 'callback',
        // async: false,
        data: "code="+code+"&start="+start+"&number="+number+"&type="+type,
        success:function(data){      
          analy2(data);
        },error:function(XMLHttpRequest, textStatus, errorThrown){}    
    });
    

    1、设置 dataType 为 jsonp

    2、设置 jsonp:callback

    3 、设置 jsonpCallback:'callback'

    这两个 callback 必须和 服务器 返回的 json 数据里面的callback 相同。不然,对应不上,不会发生回调。

    而且,这两个callback 可以叫任意的名字,只要能跟服务器的 返回值对应上即可。

    这时候,继续声明,success:function(data){ } 这个回调函数,方法会同时走 callback和 success这两个回调函数。使用哪个都可以。

    相关文章

      网友评论

          本文标题:解决跨域问题 No 'Access-Control-Origin

          本文链接:https://www.haomeiwen.com/subject/ueppkctx.html