2011-02-14 199 views
6

我在site.com试图抓住从我的node.js服务器的一些JSON数据端口服务8080跨域AJAX JSON

我收到此错误信息:

XMLHttpRequest cannot load http://site.com:8080/json/1. Origin http://site.com is not allowed by Access-Control-Allow-Origin. 

我的代码:

$.get('http://site.com:8080/1/', {}, function (Data) { 
     console.log(Data); 
    }, "json"); 

但它是相同的域名! :(

还要考虑我的Backbone.js的模型:

model = Backbone.Model.extend({ 
    url: function() { 
     return 'http://site.com:8080/' + this.id 
    } 
}); 

有什么方法比使用JSONP来解决这个其他

感谢

+9

端口必须匹配,否则jsonp确实是唯一的选择。 – 2011-02-14 00:35:30

+0

我遇到同样的问题。恕我直言,这应该在文档中澄清(端口被认为是域的一部分)。另外,跨子域的请求是否也是非法的? – snapfractalpop 2012-03-30 14:59:47

回答

2

或者,您可以修改您的node.js服务器以允许跨源资源共享(CORS)。这只适用于现代浏览器。最简单的(也是最不安全的)要做的事情就是让你的node.js服务器发出标题“Access-Control-Allow-Origin:http://site.com”。你可以在这里了解更多关于CORS的信息:http://www.w3.org/TR/cors/

7

如果你正在做的电话吗?到同一个域名,为什么你的$.get请求中有绝对路径?

试试这个:

$.get('/1/', {}, function (Data) { 
    console.log(Data); 
}, "json"); 


model = Backbone.Model.extend({ 
    url: function() { 
     return '/' + this.id 
    } 
}); 

如果您确实在同一个域上进行调用,那么上面的代码应该可以工作。

0

你必须打电话到你的脚本加载的同一个域和端口。你应该可以使用jmort的代码。