Я пытаюсь отправить json в скрипт php на сервере, и хотя я включил заголовок в скрипт php, чтобы CORS выдавала ошибку консоли
сообщение об ошибке
XMLHttpRequest не может загрузить http://www.awesomegag.0fees.us/updata.php. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». ПроисхождениеHTTP: // локальный: 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);
})
});
Я попытался заставить его работать с использованием метода proxy, указав path / api и proxyUrl по адресу updata.php в ionic.project, а затем заменив URL в службе http на / api. Я получаю 500 внутренних ошибок сервера.
Кто-нибудь может помочь?
Обновление: я переехал на другой сервер, где все работает нормально. Я полагаю, что это проблема с сервером, но я не знаю, как это исправить.
Похоже, что ваш сервер не позволяет метод OPTIONS.
Современный браузер делает «предполетный» запрос на запрос перекрестного источника, чтобы убедиться, что это разрешено делать перед отправкой запроса GET / POST.
Решение: Включить команду OPTIONS. Пример для Apache http://httpd.apache.org/docs/trunk/mod/mod_allowmethods.html
Других решений пока нет …