第一次发布到 stackoverflow。
我只是想使用 jquery 从 json url 获取数据。 第一个问题是跨源请求 block ,即使有应该阻止此问题的库,例如 ajax 跨源 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 支持,但他们指的是 sinatra for ruby。
Why Does JSONP Call Return Forbidden 403 Yet URL can be accessed in a browser
所以我尝试了 npmjs jsonpclient 并仍然得到了禁止的响应。
有什么想法吗?这花了我一天多的时间。
最佳答案
问题:服务器 ( http://take-home-test.herokuapp.com ) 没有设置“Access-Control-Allow-Origin” header 。如果您有权访问服务器,请使用“--cors”选项启动它。又名:node bin/http-server --cors ...这将通过 Access-Control-Allow-Origin header 启用 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 添加到该 fiddle 中:))
关于javascript - 403 禁止响应 JSONP 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36819223/