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

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

解决跨域问题 No 'Access-Control-Origin'_第1张图片
image

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

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

报错信息:

mark
解决跨域问题 No 'Access-Control-Origin'_第2张图片
timg.jpg

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

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

注意:

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

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

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


解决跨域问题 No 'Access-Control-Origin'_第3张图片
头疼.jpg

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

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

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

解决跨域问题 No 'Access-Control-Origin'_第4张图片
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')