怎样通过$.ajax跨域请求斗鱼TV API 取得json数据


通过$.ajax跨域请求 chrome提示 Uncaught SyntaxError: Unexpected token

这是我失败的代码

    $.ajax({
        type: "get",
        url: "http://open.douyucdn.cn/api/RoomApi/live/lol",
        dataType: "jsonp",
        jsonp: "callback",
        jsonpCallback: "data",
        success: function(response) {
            console.log(response);
        }
    });

斗鱼TV API文档

我去google后,了解到返回的数据是json格式,但我如果将dataType的value改成json后,又会出现跨域问题。
这期间我尝试使用script直接调用该链接,但还是同样的问题,
贴出失败的代码:

var url = "http://open.douyucdn.cn/api/RoomApi/live/lol";
    var script = document.createElement("script");
    script.setAttribute("src", url);
    document.getElementsByTagName("head")[0].appendChild(script);

我觉得我的问题应该归纳为:如何使用javascript在跨域条件下调用json格式数据?
希望大家能指导我一下,谢谢!


这个问题来源于freecodecamp上的一个小题目,
题目地址
我只是将其中的twitch API改为斗鱼API


jsonp请求需要服务器做相应的jsonp请求响应处理的,所以服务器没做你是无法jsonp请求的,你可以试试iframe里面放个表单用表单去请求,然后获取iframe里面的内容,对里面的json字符串做转换,因为表单请求不存在所谓的跨域


jsonp的返回格式和json是不一样的。

你可以借用别的语言先请求一下,你封装成jsonp的格式。


那是人家不支持JSONP 回调

2个方法解决

1.自己用php或者其它后端处理下

2.在自己服务器上配置WEB反向代理


服务器上面有限制吧


获取到斗鱼的json字符串后,作为data传给后台吗?


这个东西没有callback,没有callback 是接收不到的。 比如:http://open.douyucdn.cn/api/R...


一、后台发过来的api,基本都有权限验证的,就是header里面带auth权限验证,需要携带token
二、涉及到跨域,可能后端一定做了域名限制(必须),就是Access-Control-Allow-Origin:"..."这货,对域名限制后,基本别的ip访问不了api;
三、可能需要模拟登陆后爬取数据,需要cookie验证,没有cookie就没有一切;
你想的简单了,这就是个小爬虫了,单单的ajax没拉莫强大。

当然公共的api除外


可以在客户端用一个服务器做代理转发,服务器发请求时没有跨域问题的


这个应该人家对jsonp跨越做了限制,可以用Yahoo跨域访问代理试试,具体我有个项目用到了,可以去看看:https://github.com/Hancoson/r...


jsonp本来就是不安全的请求,一般服务器是不允许这样操作的。只有自家调自己的才想想要不要放。
你还是自己用http请求吧


gaylun.tv
把所有游戏直播平台都给爬了,最下方有源代码



相关阅读:
cef3 cookie分离
标签添加成功了为什么不显示呢?
PHP水印合成中文乱码怎么解?网上教程没用
chrome下disabled的input不能选中和复制, 有解决办法吗
ps切图出现细线
canvas绘制的时钟,出现多余的黑色线条是怎么回事??
关于页面同时异步请求两个js,渲染页面等待如何优化
关于 promise 的问题:请问在这个短小函数里 then 会被执行几遍?
Vue嵌套路由失效?
php中static和abstractor有啥区别?
如何删除选中的cell中对应的行?
js弹窗验证失败
关于STUN协议中属性的一点问题
vuejs 折叠面板的展开收缩动画应该怎么实现?用vue自带的过渡效果还是css3?
关于表单页面提交信息的判断
extjs3.2 panel组件能否添加focus和blur事件
如何将全局变量i变成函数的局部变量?
vue应用嵌在微信里 ,点击微信右上角的分享其中一个页面的链接 ,怎样让用户点开来就是当前页面呢?
AngularJS路由添加controller问题
PC端API和移动端API有什么不同吗?



快速导航

Copyright © 2016 phpStudy |