Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.07.2015, 11:25
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

Отправка POST запроса на другой домен
Нужно отправить POST или GET запрос на поддомен, для логина.
Почитал про кросс-доменные запросы тут, решил попробовать.
var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;

			var xhr = new XHR();
			
			xhr.withCredentials = true;
			// (2) запрос на другой домен :)
			xhr.open('GET', 'http://ru.temsi/?login=123', true);
			
			xhr.onload = function() {
			  alert( this.responseText );
			}
			
			xhr.onerror = function() {
			  alert( 'Ошибка ' + this.status );
			}
			
			xhr.send();

ответ
Код:
Remote Address:127.0.0.1:80
Request URL:http://ru.temsi/
Request Method:GET
Status Code:200 OK
Всё вроде ок, но данные не передаются то, и всё-время выводит "ОШИБКА 0"
код на сервере на который посылаю запрос
Код:
session_start();
	if($_GET['login'])
		$_SESSION['user'] = $_GET['login'];
	echo $_SESSION['user'];
Может я конечно что-то не так понимаю, но потом при заходе на ru.temsi сессия пустая

Последний раз редактировалось xTODx, 01.07.2015 в 14:07.
Ответить с цитированием
  #2 (permalink)  
Старый 01.07.2015, 17:41
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

АААА!!!!
Держите - Кроссдоменный POST
PS: хедер "Access-Control-Allow-Origin" поставил?

Последний раз редактировалось KosBeg, 01.07.2015 в 17:45.
Ответить с цитированием
  #3 (permalink)  
Старый 01.07.2015, 17:44
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Вы хоть весь урок прочитали? - https://learn.javascript.ru/xhr-cros...81%D0%BE%D0%B2

UPD: читайте внимательно!
Ответить с цитированием
  #4 (permalink)  
Старый 02.07.2015, 20:53
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

В php установить?
Код:
//Это на сервере, с которого отправляю GET запрос?
header("GET /request");
header("Host:http://ru.temsi/");
header("Origin:*");
//это на стороне сервера, на который отправлен запрос,  так?
header("Access-Control-Allow-Origin: http://ru.temsi/");
header("Access-Control-Allow-Credentials: true");
Верно? я читал, возможно просто что-то не понял, уже получалось отправлять запрос таким образом, однако из расширения хром, там не столкнулся с такой защитой.
Сейчас всё так-же, запрос якобы отправляет, но результат пустой.
Ошибка
Код:
XMLHttpRequest cannot load http://inject/. 
The 'Access-Control-Allow-Origin'
 header has a value 
'http://inject' that is not equal to the supplied origin. 
Origin 'http://temsi' is therefore not allowed access.
Ошибка в заголовках, да.
Подскажите что и где подправить.

Последний раз редактировалось xTODx, 02.07.2015 в 21:17.
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2015, 09:53
Аватар для KosBeg
Профессор
Отправить личное сообщение для KosBeg Посмотреть профиль Найти все сообщения от KosBeg
 
Регистрация: 22.05.2015
Сообщений: 384

Пробуем на локалке:
содержимое http://min.example.com/index.php (с которого идет запрос)
<script type="text/javascript">
var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;

var xhr = new XHR();
*!*
xhr.withCredentials = true;
*/!*

xhr.open('GET', 'http://name.net/?login=123', true);
xhr.onload = function() {
  alert( this.responseText );
}
xhr.onerror = function() {
  alert( 'Ошибка ' + this.status );
}
xhr.send();
</script>


содержимое name.net/index.php (на который идет запрос)
<?php
header('Access-Control-Allow-Origin: http://min.example.com'); // http://min.example.com - домен с которого разрешен запрос
// для всех доменов можно поставить "*"
// header('Access-Control-Allow-Origin: *!***/!*');
// главная ошибка(в которой я сам попался =)) в том - что в конце домена НЕ ДОЛЖНО БЫТЬ СЛЕША!
// "http://min.example.com*!*/*/!*" - неправильно, "http://min.example.com" - правильно"
header('Access-Control-Allow-Credentials: true'); // если нужно передавать куки(или сесию) ставим этот хедер
session_start();
	if($_GET['login'])
		$_SESSION['user'] = $_GET['login'];
	echo $_SESSION['user'];
echo 'ok';
?>

Должна появится сесия - щас сам протестирую на локалке

UPD: протестировал и немного поправил код, все работает
Я думаю вы розберетесь, я кажись понятно обьяснил =)

Последний раз редактировалось KosBeg, 03.07.2015 в 10:33.
Ответить с цитированием
  #6 (permalink)  
Старый 03.07.2015, 12:28
Профессор
Отправить личное сообщение для xTODx Посмотреть профиль Найти все сообщения от xTODx
 
Регистрация: 04.02.2014
Сообщений: 167

Вот это да, спасибо, так всё понятно!! + к Карме, Всего доброго!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с отправкой POST запроса Dina777 AJAX и COMET 2 26.05.2015 21:35
Как отправить форму на другой домен? lucky89 AJAX и COMET 4 28.04.2015 12:01
Отправка запроса с одного на другой сайт makar3000 Общие вопросы Javascript 6 21.12.2011 23:50
Отправка данных $.post на другой домен uExpo Общие вопросы Javascript 6 05.11.2011 07:17
Проблема при передаче запроса POST martinss AJAX и COMET 7 09.04.2011 23:35