2016-04-24 120 views
0

首次发布到stackoverflow。403禁止对JSONP请求的响应

我只是想使用jquery从json url获取数据。 第一个问题是交叉原点请求块,即使是用来阻止这个问题的库,比如ajax cross origin js(抱歉不提供这个链接,我太新了,没有超过2个链接),我仍然没有运气,相同的交叉原点错误。

所以我搬到了JSONP。

url = "http://take-home-test.herokuapp.com/api/v1/works.json?callback=?" 
$.ajaxSetup({ dataType: "jsonp" }); 
$.getJSON(url, function(json) { 
    console.log(data); 
}); 

(用于JSONP请求的AJAX语法我尝试过)

现在我可以将数据返回背面的网络选项卡上看到,但状态为403禁止。 pic of the response in the network tab of chrome

我正在使用http-server,您可以使用npm进行安装,以避免chrome出现json MIME类型的问题。 这个类似的堆栈溢出答案说,我需要为我的框架集成jsonp支持,但他们指的是用于ruby的sinatra。 Why Does JSONP Call Return Forbidden 403 Yet URL can be accessed in a browser
所以我尝试了npmjs jsonpclient,仍然得到了禁止的响应。

任何想法?这花了我一天的时间。

+1

该资源是否需要某种身份验证? – nnnnnn

+0

我很怀疑。这个API是作为公司带回家采访测试的一部分提供的。 – Sally

+0

我相信这是API端点上的Access-Control-Allow-Origin标题的问题。 –

回答

0

问题:服务器(http://take-home-test.herokuapp.com)没有设置“Access-Control-Allow-Origin”标头。如果您有权访问服务器,请使用'--cors'选项启动它。又名:node bin/http-server --cors ...这将通过Access-Control-Allow-Origin标题启用CORS,并应解决您的问题。

如果您无权访问服务器。这是一个快速解决方案:通过http://cors.io代理您的请求。见下文。

url = 'http://take-home-test.herokuapp.com/api/v1/works.json?callback=?'; 
new_url = "http://cors.io/?u=" + encodeURIComponent(url); 

$.ajaxSetup({ dataType: "jsonp" }); 
$.getJSON(new_url, function(json) { 
    console.log(json); 
}); 

的jsfiddle:http://jsfiddle.net/davemeas/4rt3s7ta/1/(注:必须将jQuery添加到小提琴:))

0

这是我找到工作的代码最简单的版本,由于戴夫尺寸:

url = http://take-home-test.herokuapp.com/api/v1/works.json" 
new_url = "http://crossorigin.me/" + url; 
$.getJSON(new_url, function(json) { 
console.log(json); 
});