2013-02-19 29 views
5

Ben raylar ve üzüm (api.domain.com) yazılmış bir API bağlanan bir JS istemcisi (app.domain.com) sahip çağırır. CORS kuruldu ve iki etki alanı arasında günlük girişi api.domain.com sunucusunda gerçekleştirilirken paylaşılan bir çerezim var.Varsayılan ayarlar

Bu JS uygulama Spine.js yüzden her şey CoffeeScript yazılır kullanıyor.

@item.destroy 

Bu API için DELETE isteği gönderir: Yani sadece kullanmak bir silme isteği göndermek için.

$.ajax({ 
     url: "http://api.domain.com/tasks/" + @item.id, 
     type: "DELETE", 
     crossDomain: true, 
     xhrFields: { 
      withCredentials: true 
     } 
    }) 

Ve bu mükemmel çalışıyor: çerez istek başlığında birlikte gönderilmez Ancak bu yüzden bu bir kod yukarıdaki satırı değiştirmek zorunda kaldı. Çerezin gönderilmesi ve işlemin doğrulanması için istek üzerine "Erişim-Kontrol-İzin-Kimlik Bilgileri: gerçek" bir yanıt başlığı gönderecektir. Bununla birlikte, bu yolla, her istek için gerçekten çok zaman harcayan ve ayrıca Omurga çerçevesinin faydalarını geçersiz kılan kod satırları yazmam gerekecek.

jQuery'de varsayılan ajax ayarlarını yapmanın mümkün olduğunu biliyorum, böylece sonraki ajax çağrıları bu ayarları kullanacaktır. Bu yüzden denedim: temelde elle her ajax arama için koyardı aynı ayarlardır

jQuery.ajaxSetup({ 
headers: { 
    "X-Requested-With": "XMLHttpRequest", 
    "Access-Control-Allow-Credentials": "true" 
    }, crossDomain: true 
}); 

. Ancak bu yaklaşım, API'ye gönderilen istekte bu başlıkları görmeme rağmen çalışmaz (ateşböceği aracılığıyla).

Bir şey mi eksik?

Şimdiden teşekkürler!

Dav

+6

deneyebilirsin: '$ .ajaxSetup ({ crossDomain: true, xhrFields: {withCredentials: true}}); '? – Kaeros

cevap

1

Geçenlerde çok benzer bir sorun vardı ve bunu yapmanın 2 basit yollar buldular. Önce başka bir deyişle için arama yapmak için java script işlevler oluşturmak:

function delete (url){ 
    $.ajax({ 
     url: url, 
     type: "DELETE", 
     crossDomain: true, 
     xhrFields: { 
      withCredentials: true 
     } 
    }) 
} 

veya eğer

Kolayca dahil ve yeniden olabilir biraz sınıfını oluşturarak öneririz birden fazla sayfada yeniden ediliyor. Bu ayrıca, sadece varsayılan ayarlardan daha fazlasını ayarlamanıza ve sık kullanılan api çağrıları için işlevler oluşturmanıza olanak tanır.

0

istemci tarafı app açılışta bu yapın: Sonra sunucusu bu yanıt gerekiyor

$.ajaxSetup({ 
    xhrFields: { 
    withCredentials: true 
    } 
}) 

CORS başlığı:

Access-Control-Allow-Credentials: true 
İlgili konular