2011-02-14 31 views
6

benim node.js sunucudan bazı json veri portunda görev kapmak için çalışıyor site.com çıkıyorum 8080alanları arası ajax json

Bu hata mesajı alıyorum:

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

kodumu :

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

Ancak bu aynı etki alanıdır!

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

jsonp kullanmaktan daha bu diğer çözmek için herhangi bir yolu var mı

Teşekkür

+9

Bağlantı noktaları da eşleşmelidir, aksi halde jsonp gerçekten tek seçenektir. –

+0

Aynı sorunu yaşıyorum. IMHO, bu belgelerde açıklığa kavuşturulmalıdır (bu portların alanın bir parçası olduğu kabul edilir). Ayrıca, alt alan adları genelinde de yasa dışı talep var mı? – snapfractalpop

cevap

2

Alternatif olarak, Kökenli Kaynak Paylaşımı'na (CORS) izin vermek için node.js sunucunuzu değiştirebilirsiniz. Bu sadece modern tarayıcılarda çalışır. En basit (ve en az güvenli) şey, node.js sunucunuzun "Erişim-Kontrol-İzin-Menşei: http://site.com" başlığını yayınlaması için olurdu. Burada CORS hakkında daha fazla bilgi edinebilirsiniz: http://www.w3.org/TR/cors/

+0

Merhaba, bunun neden güvenli olmayacağını açıklayabilir misiniz? – FriiSource

+0

Kökeni isteği üstbilgisi, etki alanları arası isteğin nereden geldiğini gösterir. Yapılması en az güvenli olan şey, üçüncü taraf sitelerin verilerinize erişmesine izin vermektir (örn. "Erişim Denetimi - İzin Verme - Orgin: *"). Verileriniz herkese açıksa, istediğiniz şey bu olabilir, ancak dikkatli bir şekilde kullanmalısınız. Daha güvenli bir şey, Origin üstbilgisini okumak ve onaylanmış bir etki alanı olduğunu doğrulamak ve onaylanmış etki alanları için yalnızca "Erişim Denetimi-İzin Verme: http://site.com" başlığını yayar. – monsur

7

aramayı yapıyorsanız: :(

Ayrıca benim backbone.js modelini düşünün?. Aynı etkipoiçse, neden $.get isteğinizde mutlak yol var?

Bunu deneyin:

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


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

Aramayı gerçekten aynı etki alanında yapıyorsanız, yukarıdaki kod çalışmalıdır.

0

Aramanızı, aynı etki alanına () ve betiğinizin yüklendiği numaralı bağlantı noktasına yapmalısınız. Jmort'un kodunu kullanabilmelisin.

İlgili konular