我有一个离子应用程序,我试图做一个POST:
$http({
url: url+'/usuario/log',
method: 'POST',
data: {usuario : $scope.data.usuario, senha:$scope.data.senha},
headers : {'content-type':'application/json; charset=UTF-8'}
}).then(function(result) { ... });
在服务器端,我有一个Yii2应用程序:
public function actionLog(){
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: *");
header("Access-Control-Allow-Headers: content-type");
$params = json_decode(file_get_contents('php://input'),true);
$usuario = $params['usuario'];
$senha = $params['senha'];
...
}
但我得到的错误总是如此,我发送一个POST并获得一个OPTIONS
OPTIONS http://www.nexusolucoes.com.br/personal/web/usuario/log
XMLHttpRequest cannot load http://www.nexusolucoes.com.br/personal/web/usuario/log. Response for preflight has invalid HTTP status code 500
答案 0 :(得分:0)
问题似乎与CORS有关,如果后端与前端不同,则浏览器将始终首先发送OPTIONS请求,以确认前端域允许跨域共享。
如果浏览器获得OPTIONS的正确响应,那么POST请求(您想要的那个)将照常触发。
总而言之,您需要:在URL管理器上添加映射,以响应OPTIONS谓词,以获取您发送POST的完全相同的URL。然后,您需要在控制器中创建操作或使用Yii的yii \ rest \ OptionsAction以及CORS过滤器来允许前端域发出POST请求。
请查看以下链接以获取更多信息: