Javascript 405方法不允许-适用于除iOS Safari之外的所有内容
我一直在尝试用AngularJS制作一个应用程序,它可以跟踪一些统计数据,并允许用户将它们提交到google应用程序脚本进行进一步处理。在计算机上一切都能正常工作。我已经在chrome和firefox中对其进行了测试,但当我尝试在iPad上提交时,它显示了以下错误: 加载资源失败:服务器响应状态为405(不允许使用方法) 加载资源失败:无法从null发出任何请求Javascript 405方法不允许-适用于除iOS Safari之外的所有内容,javascript,angularjs,mobile-safari,http-status-code-405,Javascript,Angularjs,Mobile Safari,Http Status Code 405,我一直在尝试用AngularJS制作一个应用程序,它可以跟踪一些统计数据,并允许用户将它们提交到google应用程序脚本进行进一步处理。在计算机上一切都能正常工作。我已经在chrome和firefox中对其进行了测试,但当我尝试在iPad上提交时,它显示了以下错误: 加载资源失败:服务器响应状态为405(不允许使用方法) 加载资源失败:无法从null发出任何请求 var URL = 'https://script.google.com/macros/s/.../exec'; $http.pos
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);
});
无法加载XMLHttpRequest。无法从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
请帮忙 请看
这个问题还没有解决,目前还没有确定日期
我认为根本原因是谷歌应用程序脚本无法处理Safari用于向其他域“预处理”非标准请求的选项方法
我正在使用的工作是向我的服务器发出请求,然后与GoogleApps脚本进行交互。不是美丽和缓慢,但我需要确保该网站的工作
下面是我用来在服务器上发出请求的php代码,将宏、id和工作表作为get参数传入。php然后返回从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;
?>
这现在意味着Safari正在向同一个域发出请求,我们也在遵循谷歌用CURLOPT_FOLLOWLOCATION善意地为我们添加的403重定向注释
2015年5月7日更新
我注意到,尽管我从服务器接收到405方法不允许的响应
,但Google应用程序脚本实际上正在成功接收数据。例如,我能够毫无问题地接收get和post参数
为了适应这种情况,我在AJAX调用的错误捕获中添加了一个开关,因为我实际收到的错误代码是
0
。。。很高兴看到某些东西在工作,但我不会太相信它在生产中。我在下面发布了一个更新