2011-02-14 147 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的代碼。