Отправка запроса на сервер, получение данных (AS3, PHP)

Уроки по PHP, Javascript и т.п.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение Александр »

Отправка запроса на сервер, получение данных (AS3, PHP)

Очень часто начинающие хотят отправить данные из флешки на сервер или загрузить во флешку данные с сервера. Всё что нужно начинающим в таком случае - это научиться использовать сервер и изучить ActionScript. Примеры кода из этого урока помогут разобраться.

ВАЖНО! Если вы планируете записывать в базу данные, полученные от пользователя или выводить их для пользователей, то уделите внимание безопасности, иначе ваш код может быть уязвим. Подробнее читайте в теме Безопасность скриптов, защита от инъекций, XSS (php, sql).

Для взаимодействия флеш приложения с сервером, на сервере должен находиться файл crossdomain.xml
Файл должен лежать в корне сайта, например http://flapps.ru/crossdomain.xml
Например, для разрешения обращаться к серверу из приложений вконтакте, crossdomain.xml должен содержать такой код:

Код: Выделить всё

<cross-domain-policy><allow-access-from domain="*.vkontakte.ru" /><allow-access-from domain="*.vk.com" /><allow-access-from domain="*.userapi.com"/><allow-access-from domain="*.vk.me"/></cross-domain-policy>
При тестировании локально, приложение может получать данные с сервера вне зависимости от существования crossdomain.xml
Если ваше приложение работает локально, а при загрузке вконтакт оно не получает данные, то скорее всего проблема именно в crossdomain.xml


Флеш работает с кодировкой UTF-8. Подгружаемый текст должен быть в этой кодировке. Если вместо русских букв вы видите крякозябли, а цифры и английские буквы отображаются верно, то дело в кодировке. Подробнее в теме Кодировка файлов (UTF-8, Windows-1251).
Примечание: Можно добиться чтобы текст в кодировке cp1251 тоже отображался нормально, но лучше использовать UTF-8.



Получение данных от php скрипта (метод GET)

Код: Выделить всё

var loader:URLLoader = new URLLoader();var request:URLRequest=new URLRequest('http://flapps.ru/script.php');loader.addEventListener(Event.COMPLETE, onComplete);loader.load(request); function onComplete(event:Event):void {    // выводим полученные данные в поле result_tf    result_tf.text=loader.data;}
Пример PHP скрипта

Код: Выделить всё

<?echo 'http://flapps.ru';?>
GET запрос лучше использовать когда нужно просто подгрузить какие-то данные.
Если подгружать данные с одной и той же страницы, то может показаться, что приложение не получает новые данные. Дело в кэшировании!
Чтобы избежать кэширования, надо передать в get запросе дополнительный параметр, например случайное число.

Код: Выделить всё

var loader:URLLoader = new URLLoader();var request:URLRequest=new URLRequest('http://flapps.ru/script.php' + '?' + Math.random());loader.addEventListener(Event.COMPLETE, onComplete);loader.load(request); function onComplete(event:Event):void {    // выводим полученные данные в поле result_tf    result_tf.text=loader.data;}

C помощью GET запроса можно передать данные php скрипту.

Код: Выделить всё

var gid = '17157755';var mess = 'flapps.ru'; var loader:URLLoader = new URLLoader();var request:URLRequest=new URLRequest('http://flapps.ru/script.php' + '?gid=' + gid + '&mess=' + mess + '&' + Math.random());loader.addEventListener(Event.COMPLETE, onComplete);loader.load(request); function onComplete(event:Event):void {    // выводим полученные данные в поле result_tf    result_tf.text=loader.data;}
Первый параметр присоединяется с помощью знака "?", остальные с помощью знака "&".

PHP

Код: Выделить всё

<?// получаем параметры$param1 = $_GET['gid'];$param2 = $_GET['mess']; // можно сделать что-то с полученными данными, например вывестиecho $param1;echo $param2;?>
С помощью GET запроса не стоит передавать большие параметры, данные могут дойти не целиком. Используйте метод POST.



Отправка POST запроса php скрипту, передача параметров
AS3

Код: Выделить всё

var gid = '17157755';var mess = 'flapps.ru'; var loader:URLLoader = new URLLoader();var request:URLRequest=new URLRequest('http://flapps.ru/script.php'); // адрес вашего скриптаrequest.method=URLRequestMethod.POST; var vars:URLVariables = new URLVariables();vars['gid']=gid;vars['mess']=mess; request.data=vars;loader.addEventListener(Event.COMPLETE, onComplete);loader.load(request); function onComplete(event:Event):void {    // выводим полученные данные в поле result_tf    result_tf.text=loader.data;}
При отправке данных методом POST, данные не кэшируются, добавлять случайную переменную нет необходимости.

PHP

Код: Выделить всё

<?// получаем параметры$param1 = $_POST['gid'];$param2 = $_POST['mess']; // можно сделать что-то с полученными данными, например вывестиecho $param1;echo $param2;?>

Если у вас что-то не получается и вы не знаете почему, то посмотрите урок Отладка приложений, взаимодействующих с сервером (Charles).
Аватара пользователя
Богдан
Сообщения: 21
Зарегистрирован: 26 дек 2010, 05:22

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение Богдан »

Спасибо огроменное!
kostya74
Сообщения: 59
Зарегистрирован: 09 авг 2011, 11:25

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение kostya74 »

Код: Выделить всё

<?echo 'http://flapps.ru';?> 
То есть flapps.ru от эту ссылку и отправит? А приложение выведет? И всё в одну строчку php скрипта?
bubbless
Сообщения: 28
Зарегистрирован: 17 июн 2012, 13:08

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение bubbless »

У меня при методе GET Вот что выдаёт
1120: Обращение несуществующего свойства loader.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение Александр »

bubbless
Попробуй добавить

Код: Выделить всё

import flash.display.Loader;
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение Agiliter »

Написал на as3

Код: Выделить всё

package  {    import flash.utils.*;    import flash.display.*;    import flash.errors.*;    import flash.events.*;    import flash.net.*;    //import flash.display.Sprite;        //import flash.net.URLVariables;    //import flash.net.sendToURL;    //import flash.errors.IOError;       public class Main extends Sprite     {        private var loader:URLLoader;        private var request:URLRequest;                public function Main()         {            loader = new URLLoader();            request = new URLRequest('http://flashtest1.ru/script.php');            //request = new URLRequest('Z:\\home\\FlashTest1.ru\\www\\script.php');            loader.load(request);            loader.addEventListener(Event.COMPLETE, GOOD_TEST);            loader.addEventListener(IOErrorEvent.IO_ERROR, BAD_TEST);        }                private function GOOD_TEST(e:Event):void        {            trace("Good! ");        }         private function BAD_TEST(e:IOErrorEvent):void        {            trace("File not found! Ошибка:" + e);        }            } }
Использую денвер для локального тестирования. php скрипт находится по адресу Z:\\home\FlashTest1.ru\www\script.php

Код: Выделить всё

<?echo 'Hello world!';?>
В результате выдает ошибку:
Ошибка при открытии URL-адреса "http://flashtest1.ru/script.php"
File not found! Ошибка:[IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Ошибка потока. URL: http://flashtest1.ru/script.php"]

В чем может быть причина?
sasha^
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение sasha^ »

может денвер не запущен?)) если только создан домен - нужно его перезапустить...
но ошибка явно говорит что не может открыть файл))))
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

Re: Отправка запроса на сервер, получение данных (AS3, PHP)

Сообщение Agiliter »

sasha^ писал(а):может денвер не запущен?)) если только создан домен - нужно его перезапустить...
но ошибка явно говорит что не может открыть файл))))
Да, ошибка дурацкая была. Скрипт назывался sript.php. Букву пропустил))
Ответить