日期:2014-05-16  浏览次数:20595 次

关于新浪微博API的ajax跨域问题

最近工作有个微博营销的需求需调用新浪微博API接口,碰到了不少问题,一一总结

1.利用ajax调用新浪微博API接口牵扯到ajax跨域的问题,而ajax跨域的问题有几种解决方案,如jsonp、动态script标签、iframe,各种方案的要求与适应场景各不相同,网上一搜一大把。在新浪微博的API说明中,只说明了返回的数据类型,未说明是否支持jsonp方法回写,其实新浪微博API是支持jsonp回写的,如用jquery发ajax请求

?

?

$.ajax({
    // Weibo API.
    url: "https://api.weibo.com/2/users/show.json",
    type: "GET",
    dataType: "jsonp",
    data: {
        source: "XXX",
        uid: "XXX"
    },
    success: function(data, textStatus, xhr){
        alert(data.data.screen_name)
    }
})
?

通过抓包工作可以抓到发出的请求为

?

?

https://api.weibo.com/2/users/show.json?callback=jsonp1337331494998&source=XXX&uid=XXX
?

如指明了dataType : jsonp的话,jquery额外加了个callback参数,这就是jsonp的风格,在此种方式下,请求不是以ajax方式发出去的,内部应该是通过动态生成script标签发出跨域请求的,在回调方法中获取返回状态码是获取不到的,如success方法中的textStatus始终为null,用抓包工具可以获取到该API返回了与API说明稍微不一样的数据

?

?

try{jsonp1337331494998({"code":1,"data":{"id":XXX,"idstr":"XXX","screen_name":"XXX","name":"XXX","province":"44","city":"3","lo...