【发布时间】:2012-12-15 15:12:21
【问题描述】:
我在通过 ajax 接收 json 时遇到问题,错误如下。根据我迄今为止发现的有关该错误的信息,这似乎是某种跨域问题,但我不知道这意味着什么以及如何解决它。
响应头可能有问题(我自己创建了 API,之前没有经验),但是如果直接在浏览器中访问 url,则会收到 200 OK。
如果直接在浏览器中访问 url 会显示有效的 json,那么这应该不是问题。
如何解决?
注意:该 url 转到 Apache 服务器,而不是我在 Stack 上阅读过的有关该问题的 95% 问题的文件。
检查器出错:
XMLHttpRequest cannot load http://localhost/api/v1/products?_=1355583847077.
Origin null is not allowed by Access-Control-Allow-Origin.
Error: error
代码:
$.ajaxSetup ({
url: "http://localhost/api/v1/products", // <--- returns valid json if accessed in the browser
type: "GET",
dataType: "json",
cache: false,
contentType: "application/json"
})
$.ajax({
success: function(data){
console.log("You made it!");
},
error: function(xhr) {
console.log("Error: " + xhr.statusText);
}
}).done(function(data){
console.log(data);
})
参数
_1355583610778
标题
响应标头:
Connection Keep-Alive
Content-Length 3887
Content-Type application/json
Date Sat, 15 Dec 2012 14:50:53 GMT
Keep-Alive timeout=5, max=100
Server Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1
X-Powered-By PHP/5.3.1
请求标头:
Accept application/json, text/javascript, */*; q=0.01
Accept-Encoding gzip, deflate
Accept-Language sv-SE,sv;q=0.8,en-US;q=0.5,en;q=0.3
Connection keep-alive
Host localhost
Origin null
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:17.0) Gecko/17.0 Firefox/17.0
响应
这里什么都没有……
【问题讨论】:
-
您是否尝试从不同的协议(例如
https、不同的端口或子域)访问? -
holyredbeard,关于 URL 转到 Apache 服务器而不是文件的观点,我想知道您是否不知道“绝对”和“相对” URL 之间的区别。经过一些背景阅读后,我想您会发现您认为的“文件”请求实际上是对服务于当前页面的同一台服务器的请求。我猜没有“http://...”会让你感到困惑。
-
@Beetroot-Beetroot:好的,所以如果我在服务器上实时发布 API,这个问题可能会消失,如果我没听错的话?
-
您当然应该尝试从为原始页面提供服务的同一台服务器上提供
api/v1/products- 这是大多数网站采用的传统单域单服务器模型。我不能肯定这是否会解决问题,但它肯定会消除作为错误来源的跨域问题。 -
服务器当然可以在本地主机上...但必须与您发送 AJAX 请求的页面相同
标签: jquery ajax json api http-headers