2014-04-26 22 views
5

我一直試圖在AngularJS,保持一些統計數據的跟蹤,並允許用戶將其提交到谷歌Apps腳本進行進一步處理的應用。一切工作在計算機上完美。我已經在Chrome和Firefox中測試過它,但是當我嘗試在iPad上提交時,它顯示以下錯誤:405不允許的方法 - 適用於一切,除了iOS的Safari瀏覽器

加載資源失敗:服務器響應狀態爲405(方法不允許)

加載資源失敗:無法從null發出任何請求。

XMLHttpRequest無法加載https://script.googleusercontent.com/macros/echo?user_content_key=UQXGbRq6...HLV301R。無法從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); 
}); 

它在控制檯上打印幾條線。數據線爲空,返回狀態爲404.

請幫忙!

+0

我已在下面發佈更新 –

回答

1

請參閱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

這個問題仍然沒有沒有當前的日期設置爲固定的解決。

我認爲根本原因是由於谷歌應用程式不能夠處理對所使用的Safari瀏覽器的「預檢」非標準請求到其他域OPTIONS方法腳本。

周圍的工作我使用的是讓我的服務器的請求,然後互動與谷歌Apps腳本。不漂亮和緩慢,但我需要確保網站正在工作。

這裏是PHP代碼我曾經讓我的服務器上的要求,通過在宏,ID和片材得到PARAMS。 PHP的然後從谷歌返回檢索到的數據:

<?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; 

?> 

現在,這意味着,野生動物園正在爲同一個域的要求,也是我們在下面的403重定向注意到谷歌在我們的CURLOPT_FOLLOWLOCATION方式好心放。

更新2015年5月7日

我注意到,雖然我收到來自服務器的響應405 method not allowed,數據實際上被成功地通過谷歌應用程序腳本接收。例如,我已經能夠接收沒有問題的獲取和發佈參數。

爲了適應這種情況,我在AJAX調用中添加了一個錯誤catch的開關,因爲我實際上收到的錯誤代碼是0 ...高興地看到有些東西在工作,但我不會相信它在生產中太多了。