最近调试一个第三方的股票K线的接口,将请求这个接口的工作放到用户这边,减轻自己服务器的压力。
当访问第三方网站时,使用Jquery 出现了如下错误。
报错信息:
mark timg.jpg我一看这,容易解决啊。经典的,需要解决服务器 不能通过 跨越请求的方式 访问数据。
既然,咱不能改人家第三方服务器的 代码,自己的代码总可以改吧。
注意:
-
不能使用 .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这两个回调函数。使用哪个都可以。
网友评论