JSONP跨域,报错Uncaught SyntaxError: Unexpected token :

 $.ajax({
            url: 'https://news-at.zhihu.com/api/4/news/'+id,
            type: "GET",
            dataType: "jsonp",
            data:"{}",
            success: function(res){
              console.log(res);
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                          alert(XMLHttpRequest.status);
                          alert(XMLHttpRequest.readyState);
                          alert(textStatus);
                      },
        });
        
        

clipboard.png

clipboard.png
这个是什么原因??

阅读 11.1k
5 个回答
fetch('https://news-at.zhihu.com/api/4/news/9661690', {mode: 'no-cors'})

人家提供的接口压根就不是jsonp格式的。给你直接返回的就是json

jsonp返回的是一个函数,返回的格式不对

使用jsonp返回的数据格式要相应的调整下,并非json格式。大致说一下java如何返回使用jsonp请求的数据格式吧!

// jsonStr:json格式的数据
return  "jsonpCallback(" + jsonStr+ ");" ;

返回使用jsonp请求的数据格式大致应该是这样的:

jsonpCallback({
    "url": "1234",
    "name": "abcd"
})

多说一句:如果您使用jsonp单单是为了跨域的话,推荐您使用跨域资源共享 CORS 来跨域,推荐您看下阮一峰大神的博文:http://www.ruanyifeng.com/blo...

返回的json格式不正确,注意服务端json数据的格式处理。

知乎的这个接口返回的是json,不是jsonp,所以不能用jsonp来处理。可以写个后台服务,然后请求后台服务,由后台服务请求知乎的接口并返回。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题