Поиск…


Выполнение запроса от 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>

Ресурсы:



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow