跨域ajax json

时间:2011-02-14 00:30:12

标签: javascript jquery ajax cross-domain backbone.js

我在site.com上尝试从端口8080上的node.js服务器中获取一些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之外,还有什么方法可以解决这个问题吗?

感谢。

3 个答案:

答案 0 :(得分:7)

如果您正在拨打同一个域名,为什么在$.get请求中有绝对路径?

试试这个:

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


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

如果您真的在同一个域上进行呼叫,则上述代码应该可以正常工作。

答案 1 :(得分:2)

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

答案 2 :(得分:0)

您必须调用从中加载脚本的相同域和端口。你应该能够使用jmort的代码。