我正在尝试将json发送到服务器上的php脚本,即使我在php脚本中包含了头文件以使控制台抛出错误的错误
错误消息
XMLHttpRequest无法加载http://www.awesomegag.0fees.us/updata.php。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:8100'因此不允许访问。响应的HTTP状态代码为403。
我的代码:
PHP
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST');
header("Content-Type: application/json; charset=UTF-8");
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo"hello";
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);
?>
我的app.js
.controller('datactr', ['$scope','$http','ApiEndpoint',function($scope,$http,ApiEndpoint) {
$scope.submit=function(){
console.log("step1");
$http({
method:'POST',
url:'http://www.awesomegag.0fees.us/updata.php',
data:{
'name':$scope.name
}
}).success(function(data,status,header,config){
console.log("step2");
console.log(data);
})
});
我尝试通过在ionic.project中将path / api和proxyUrl设置为updata.php地址,然后将http服务中的url替换为/ api,使用代理方法。我收到500内部服务器错误。
有人可以帮忙吗?
更新:我已经搬到另一台服务器,一切正常。我想这是服务器的一些问题,但不知道如何解决它。
答案 0 :(得分:0)
看起来您的服务器不允许使用OPTIONS方法。
现代浏览器对交叉原始请求执行“飞行前”请求,以确保在发送GET / POST请求之前允许这样做。
解决方案:启用OPTIONS命令。 Apache http://httpd.apache.org/docs/trunk/mod/mod_allowmethods.html
的示例