ActionScript 3
Отправка и получение данных с серверов
Поиск…
Выполнение запроса от Flash
Классы URLRequest и URLLoader работают вместе, чтобы запросы от Flash к внешним ресурсам. URLRequest определяет информацию о запросе, например, тело запроса и тип метода запроса, и URLLoader ссылается на это для выполнения фактического запроса и предоставляет средство для уведомления, когда ответ получен от ресурса.
Пример:
var request:URLRequest = new URLRequest('http://stackoverflow.com');
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, responseReceived);
loader.load(request);
function responseReceived(event:Event):void {
trace(event.target.data); // or loader.data if you have reference to it in
// this scope.
}
Добавление переменных в ваш запрос
Класс URLVariables позволяет вам определять данные для отправки вместе с URLRequest .
Пример:
var variables:URLVariables = new URLVariables();
variables.prop = "hello";
variables.anotherProp = 10;
var request:URLRequest = new URLRequest('http://someservice.com');
request.data = variables;
Вы можете отправить запрос через URLLoader или открыть URL-адрес запроса с переменными, указанными в querystring, используя navigateToURL .
Изменение метода HTTP (GET, POST, PUT и т. Д.)
Класс URLRequestMethod содержит константы для различных типов запросов, которые вы можете сделать. Эти константы должны быть выделены для свойства method URLRequest :
var request:URLRequest = new URLRequest('http://someservice.com');
request.method = URLRequestMethod.POST;
Обратите внимание, что только
GETиPOSTдоступны вне среды выполнения AIR.
Мои данные ответа всегда равны нулю, что означает «асинхронный»?
Когда Flash запрашивает данные из внешнего источника, эта операция является асинхронной . Самое основное объяснение того, что это означает, заключается в том, что данные загружаются «в фоновом режиме» и запускают обработчик событий, который вы назначаете Event.COMPLETE когда он получен. Это может произойти в любой момент вашего приложения.
Ваши данные НЕ будут доступны сразу после вызова load() на вашем URLLoader . Вы должны подключить прослушиватель событий для Event.COMPLETE и взаимодействовать с ответом там.
var request:URLRequest = new URLRequest('http://someservice.com');
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, responseReceived);
loader.load(request);
trace(loader.data); // Will be null.
function responseReceived(event:Event):void {
trace(loader.data); // Will be populated with the server response.
}
trace(loader.data); // Will still be null.
Вы не можете обойти это с помощью любых небольших трюков, например, с помощью setTimeout или аналогичного:
setTimeout(function() {
trace(loader.data); // Will be null if the data hasn't finished loading
// after 1000ms (which you can't guarantee).
}, 1000);
Междоменные запросы
Flash не будет загружать данные из домена, отличного от того, на котором работает ваше приложение, если только этот домен не имеет политики crossdomain XML в корне домена (например, http://somedomain.com/crossdomain.xml ) или где-то, может быть нацелена на Security.loadPolicyFile() . Файл crossdomain.xml - это то, где вы можете указать домены, которые могут запрашивать ваш сервер для данных из приложения Flash.
Пример наиболее разрешающего crossdomain.xml:
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
Обратите внимание, что этот пример не должен использоваться в производственных средах , используйте более ограничительный экземпляр.
Более ограничительный конкретный crossdomain.xml будет выглядеть так:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only" />
<allow-access-from domain="*.domain.com" to-ports="80,843,8011" />
<allow-access-from domain="123.123.123.123" to-ports="80,843,8011" />
</cross-domain-policy>
Ресурсы: