有用过豆瓣新版api的吗?

问与答 FraserXv 发表于 6 年前最后回复来自 qq2850071112 4 年前

最近想自己做个2013年读书的列表,并向通过调用豆瓣的api来获取自己豆瓣账号的图书首收藏信息。

参照了官方的api说明。提示"获取某个用户的所有图书收藏信息"的调用语句为

GET https://api.douban.com/v2/book/user/:name/collections

因此我尝试用我自己的用户名替换掉此处的':name'并直接在浏览器打开,可以正常的获取到json数据。

但是当我把同样的语句使用jQuery的getjson方法调用时,会出现跨域无法调用的问题。调用代码如下:

var username = 'fraserxv';

var url = 'https://api.douban.com/v2/book/user/' + username + '/collections';
$.getJSON(url,function(data){ console.log(data); data = data.book; $(data).each(function(index,value){ //... data here }) });

getjson方法照理来讲就是使用的jsonp并支持跨域,为什么此处不能获取数据?因为刚开始接触这个,所以对具体的还不太了解,求大神指导!

共收到5条回复
island205 6 年前 #1

因跨域访问出错是正常的,这是浏览器为了安全性考虑,阻止了你的跨域请求。结合你要调的是豆瓣的API,可以使用JSONP这种东东,通俗的讲就使用script标签来发送跨域请求(script获取脚本是可以跨域的)。你要做的就是找一个JSONP模块,在请求参数中添加alt:xd来向豆瓣API发送JSONP。

FraserXv 6 年前 #2

@island205 刚刚发现f2e这个站就有调用豆瓣图书列表。去github上查看了下源码,虽说不懂python,但是在里面的'lib'目录下找到了jsonp.py文件,应该就是你所说的JSONP模块对吗?

但是js下面的我就不太清楚了,暂时还没有接触过。请问有没有demo或者文章可以推荐参考一下的,谢了!

island205 6 年前 #3

有段代码可以参考:

Backbone.sync = function(method, model, options){
    var data = {alt:"xd"}
    $.ajax({
        url:model.url,
        dataType:"jsonp",
        data:_.extend(data, options.data),
        success:options.success
    })
}
FraserXv 6 年前 #4

@island205 已获取成功,感谢!

island205 6 年前 #5

@FraserXv 不客气

登录后即可参与回复