jsonp跨域请求失败

$.ajax({
    url: "https://api.steampowered.com/IDOTA2Match_570/GetMatchDetails/V001",
    jsonp: "callback",
    dataType: "jsonp",
    data: {
        match_id:27110133,
        key: '2B58A9C96FD73EC323CCFDA5383C4BBC',
        format: "json"
    },
    success: function( response ) {
        console.log( response ); // server response
    }
});

这样请求一定要在服务器端设置格式为jsonp吗?或者说客户端有什么方法能解决这种跨域的GET请求。
现在json格式非打印错误

V001:2 Uncaught SyntaxError: Unexpected token :

能不能帮我解答下,谢谢~

阅读 8.4k
6 个回答

JSONP的原来是用script加载一段服务端根据参数生成的函数,然后在本地执行。
jQuery会在本地保存一个临时函数 类似于
window.callback = function (res) {
// ...
}
然后服务端返回的script脚本里是一个刚刚之前的函数callback({...obj})
但是你现在调用的api依然返回的是json字符串,js解析当然报错。

无论是使用access-control-allow-origin 还是 jsonp都需要服务端支持
所以你让你们的后端做一个托传吧,前端不用做任何处理,你访问自己的服务器 服务端再去调用你这个第三方api接口

感觉题主应该是没明白 jsonp 的使用原理

并不是 "服务端设置"

题主把服务器端返回的内容一并贴出来看看吧,应该是后端返回的数据格式有问题。

很可能你服务端返回的只是json数据而非jsopnp数据

jsonp与ajax是有区别的
jsonp的原理是在页面中插入script标签, 所以服务器返回的格式, 应当是js代码, 类似

callback({

'name': 'json'

});

推荐问题
宣传栏