Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   $http.post передача данных с сервера (https://javascript.ru/forum/angular/52831-%24http-post-peredacha-dannykh-s-servera.html)

djan 09.01.2015 10:33

$http.post передача данных с сервера
 
При передаче файла .json выдаёт такую ошибку


$http.post('http://путь к .json файлу/', {headers:'Access-Control-Allow-Origin:*'})
.success(function(data, status, headers, config){
console.log('This is Data:',data,'\n\nThis is Status:',status,'\n\nThis is Headers:',headers,'\n\nThis is config:',config);
$scope.cities = data;


}).
error(function(data, status, headers, config) {
console.log('This is Data:',data,'\n\nThis is Status:',status,'\n\nThis is Headers:',headers,'\n\nThis is config:',config);

});
});

Походу проблема в неправильной передачи заголовка

nerv_ 09.01.2015 10:49

Даже если сервер на другом языке, должно быть все понятно http://enable-cors.org/server_php.html

djan 09.01.2015 11:44

Попробовал,всё осталось так же.

djan 09.01.2015 16:09

$http.post('http://путь к .json файлу/', {headers:'Access-Control-Allow-Origin:*'})
поменял
$http.get('http://путь к .json файлу/')
Всё работает
Спасибо!

Shasoft 13.01.2015 15:27

djan, вы наверное не читали документацию по post :)
В методе get вторым параметром идет config. А в методе post параметр config идет третьим параметром. Вторым передаётся список переменных для отправки на сервер.

djan 13.01.2015 16:26

Читал документацию.
Проблема была не этом - а в отсутствии header("Access-Control-Allow-Origin: *") - на сервере.
При передачи данных post с локального хранилища в таком виде(без {headers:'Access-Control-Allow-Origin:*'})- всё было нормально.

Danko 28.07.2015 17:45

разрешите апнуть тему. //Решено
 
Помогите, 2-й день бьюсь над переносом запросов приложения на реальный сервер.
Если все запросы на 1-м сервере - все нормально, но как только перенаправляю запросы на другой сервер - выдает ошибки.
Но все по порядку:
Проект запущен с http://localhost/
отправка запроса:
var promise = $http.post('http://mixo.pl/app_index.php', 
                      {trig: "singin", login: $scope.activeLog.login, pass: $scope.activeLog.pass}) ;
    promise.then (ChangeLogin, ChangeError);

обработчик РНР:
<?php
header('Access-Control-Allow-Origin: *');
$params = json_decode(trim(file_get_contents('php://input')), true);
if (isset($params[trig])) {
	include ("inc/config_db.php");
	if ($params[trig] == 'singin') 	{ include ("inc/app_login.php"); }
	if ($params[trig] == 'new_valid') {	include ("inc/app_new_valid.php");	}
	if ($params[trig] == 'new_done') {	include ("inc/app_new_done.php");	}
}	
?>

возвращает ошибку:
XMLHttpRequest cannot load http://mixo.pl/app_index.php. Request header field Content-Type is not allowed by Access-Control-Allow-Headers.

при этом
headers: Object
Accept: "application/json, text/plain, */*"
Content-Type: "application/json;charset=utf-8"


если добавляю в запрос Access-Control-Allow-Origin, не меняя РНР файла
var promise = $http.post('http://mixo.pl/app_index.php', 
                      {trig: "singin", login: $scope.activeLog.login, pass: $scope.activeLog.pass},
                      {headers: {'Access-Control-Allow-Origin':'*'} } ;  // <--- Добавлено в запрос
    promise.then (ChangeLogin, ChangeError);

то получаю ошибку
XMLHttpRequest cannot load http://mixo.pl/app_index.php. Request header field Access-Control-Allow-Origin is not allowed by Access-Control-Allow-Headers.

при этом
headers: Object
Accept: "application/json, text/plain, */*"
Access-Control-Allow-Origin: "*"
Content-Type: "application/json;charset=utf-8"


Подскажите, плс, в какую сторону смотреть, ибо сам уже запутался полностью.

добавление в РНР файл 3-х строчек решило проблему.
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, X-Requested-With')
?>

Danko 29.07.2015 10:01

И снова здрасте.
Проблему решил, но разрешилась она только для ПК. На скомпилированном apk не работает, как отследить ошибку на андроиде я не знаю, но по коду вижу что идет обработка промизе как Error.
Подскажите что делать ибо в растерянности.


Часовой пояс GMT +3, время: 05:37.