2015-04-08 11 views
10

Google Apps komut dosyası kullanılarak oluşturduğum bir hata bildirme işaretçisi var ve kendim olarak yayınlanmak üzere yayınlanıyor ve "herkes adına anonim olsa bile" erişilebilir olması için GAS'a X etki alanı isteklerine izin verilir. Ancak, tarayıcılarım şimdi, işaretin kod işaretlerinden sonra yanıtta Access-Control-Allow-Origin başlığının bulunmadığını gösteriyor.Google Apps Komutu etki alanları arası alanlar istekleri durduruldu

Burada bir şey mi özlüyorum? Bu, iki ay önce son zamanlarda çalışıyordu. GAS, herkese açık erişim için yayınlandığı sürece, , Access-Control-Allow-Origin başlığını ayarlayan idi.

Google Apps Script

:

Code.gs
function doPost(data){ 
    if(data){ 
     //Do Something 
    } 
    return ContentService.createTextOutput("{status:'okay'}", ContentService.MimeType.JSON); 
} 

İstemci Tarafı:

script.js bir contentService komut dosyasına çağrıları yaparak hep bir geri arama gönderilen adres
$.post(beacon_url, data, null, "json"); 

cevap

13

JSONP. GAS, CORS'yi desteklemediğinden, x-alanı sorunları geldiğinde uygulamanızın kırılmamasını sağlamanın tek güvenilir yolu budur.

jQuery'de arama yapmak için "& callback =?" Ifadesini ekleyin. Başka herşeyi çözecek. Sunucu tarafında

var url = "https://script.google.com/macros/s/{YourProjectId}/exec?offset="+offset+"&baseDate="+baseDate+"&callback=?"; 
$.getJSON(url,function(returnValue){...}); 

function doGet(e){ 
var callback = e.parameter.callback; 
//do stuff ... 
return ContentService.createTextOutput(callback+'('+ JSON.stringify(returnValue)+')').setMimeType(ContentService.MimeType.JAVASCRIPT); 
} 
+0

Ben cevap olarak bu işaretlenmiş, ancak Biraz kapalı, bu yüzden düzenlemek isteyebilirsiniz. Bazı nedenlerle, içerik türünü createTextOutput içine ayarlamak, onu JavaScript’e ayarlayarak bile sorunu çözmez. Ancak, setContentType işlevini kullanarak ve bunu JavaScript'e ayarlamak işe yarıyor. Ayrıca, bu kullanım durumunda bir POST ve GET isteği kullanmıyorum. –

+1

Ah yea, JSONP Post ile çalışmayacak. Açıkladığınız her şey doğru geliyor. Uygulamayı "ben" olarak "anonim" olarak erişime izin ver. Yayınlanan adrese geliştirici adresini değil, aramayı yaptığınızdan emin olun. Tüm ayarlanmış olması gereken: Erişim-Denetim-İzin-Kökeni: * Ben hurl.it ile küçük bir komut dosyası test ettik. Oradan gelen bütün uygun başlıkları görüyorum. –

4

Sadece benim gibi bir POST isteğinde sadece ilgilenenler için daha basit hale getirmek için:

function doPost(e){ 

//do stuff ... 

var MyResponse = "It Works!"; 

return ContentService.createTextOutput(MyResponse).setMimeType(ContentService.MimeType.JAVASCRIPT); 

} 
+1

Bu, 2018'de benim için çalışmıyor gibi görünüyor. Hala CORS hatası alıyorum. –