2014-04-26 12 views
5

Próbuję wykonać aplikację w AngularJS, która śledzi niektóre statystyki i pozwala użytkownikom przesłać je do skryptu aplikacji Google do dalszego przetwarzania. Wszystko działa idealnie na komputerze. Przetestowałem go w Chrome i Firefox, ale gdy próbuję przesłać na iPadzie to pokazuje następujące błędy:405 Metoda niedozwolona - działa na wszystkich urządzeniach z wyjątkiem iOS Safari

Nie udało się załadować zasób: serwer odpowiedział ze statusem 405 (Method Not Allowed)

Załadowanie zasobu nie powiodło się: nie można wykonać żadnych żądań od wartości null.

XMLHttpRequest nie może załadować https://script.googleusercontent.com/macros/echo?user_content_key=UQXGbRq6...HLV301R. Nie można ustawić żadnych żądań z wartości NULL.

var URL = 'https://script.google.com/macros/s/.../exec'; 

$http.post(URL, 
    $.param({ packet: JSON.stringify($scope.data) }), { 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' 
     } 
    } 
).success(function(data, status) { 
    alert(data.packet); 
    $scope.rollover(); 
}).error(function(data, status) { 
    console.log(data); 
    console.log(status); 
    $scope.show_status(data); 
}); 

Umożliwia wydrukowanie kilku linii w konsoli. Linia danych jest pusta, a zwróconym stanem jest 404.

Proszę o pomoc!

+0

Opublikowałem aktualizację poniżej –

Odpowiedz

1

proszę zobaczyć https://code.google.com/p/google-apps-script-issues/issues/detail?can=2&start=0&num=100&q=&colspec=Stars%20Opened%20ID%20Type%20Status%20Summary%20Component%20Owner&groupby=&sort=&id=3226

Kwestia ta jest wciąż jeszcze zostać rozwiązany bez bieżącej daty ustawiony na stałe.

Uważam, że przyczyną źródłową jest to, że skrypt aplikacji Google nie może obsłużyć metody OPTIONS, która jest używana przez przeglądarkę Safari do "preflightowania" niestandardowych żądań do innych domen.

Praca, której używam, polega na wysłaniu prośby do mojego serwera, aby następnie wchodził w interakcję ze skryptem aplikacji Google. Nie piękne i powolne, ale muszę się upewnić, że strona działa.

Oto kod php, którego użyłem do wykonania żądania na moim serwerze, przekazując makro, id i arkusz jako params. Php następnie zwraca pobrane dane z google:

<?php 

header('Access-Control-Allow-Origin: *'); 
$url = 'https://script.google.com/macros/s/'; 
$url .= $_GET['macro']; 
$url .= '/exec?id='; 
$url .= $_GET['id']; 
$url .= '&sheet='; 
$url .= $_GET['sheet']; 

function get_data2($url) { 
    $ch = curl_init(); 
    $timeout = 5; 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
    $data = curl_exec($ch); 
    curl_close($ch); 
    return $data; 
} 


$response = get_data2($url); 

echo $response; 

?> 

To oznacza, że ​​teraz Safari jest uczynienie żądanie do tej samej domeny, a także jesteśmy następującego po 403 przekierowanie note google uprzejmie stawia na naszej drodze z CURLOPT_FOLLOWLOCATION.

Aktualizacja 07 maja 2015

Zauważyłem, że chociaż jestem otrzymaniu 405 method not allowed odpowiedzi z serwera, dane są rzeczywiście odebrany przez skrypt Google App. Na przykład mogłem otrzymać parametry get i post bez żadnych problemów.

W tym celu dodałem przełącznik w złapaniu błędu z wywołania AJAX, ponieważ kod błędu, który faktycznie otrzymuję, to 0 ... z przyjemnością widzę, że coś działa, ale nie ufałbym zbyt wiele w produkcji.