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

Уроки по PHP, Javascript и т.п.

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

Сообщение Александр » 30 мар 2011, 21:50

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

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

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

Для взаимодействия флеш приложения с сервером, на сервере должен находиться файл crossdomain.xml
Файл должен лежать в корне сайта, например http://flapps.ru/crossdomain.xml
Например, для разрешения обращаться к серверу из приложений вконтакте, crossdomain.xml должен содержать такой код:
  1. <cross-domain-policy>
  2. <allow-access-from domain="*.vkontakte.ru" />
  3. <allow-access-from domain="*.vk.com" />
  4. <allow-access-from domain="*.userapi.com"/>
  5. <allow-access-from domain="*.vk.me"/>
  6. </cross-domain-policy>


При тестировании локально, приложение может получать данные с сервера вне зависимости от существования crossdomain.xml
Если ваше приложение работает локально, а при загрузке вконтакт оно не получает данные, то скорее всего проблема именно в crossdomain.xml


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



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

  1. var loader:URLLoader = new URLLoader();
  2. var request:URLRequest=new URLRequest('http://flapps.ru/script.php');
  3. loader.addEventListener(Event.COMPLETE, onComplete);
  4. loader.load(request);
  5.  
  6. function onComplete(event:Event):void {
  7.     // выводим полученные данные в поле result_tf
  8.     result_tf.text=loader.data;
  9. }


Пример PHP скрипта


GET запрос лучше использовать когда нужно просто подгрузить какие-то данные.
Если подгружать данные с одной и той же страницы, то может показаться, что приложение не получает новые данные. Дело в кэшировании!
Чтобы избежать кэширования, надо передать в get запросе дополнительный параметр, например случайное число.
  1. var loader:URLLoader = new URLLoader();
  2. var request:URLRequest=new URLRequest('http://flapps.ru/script.php' + '?' + Math.random());
  3. loader.addEventListener(Event.COMPLETE, onComplete);
  4. loader.load(request);
  5.  
  6. function onComplete(event:Event):void {
  7.     // выводим полученные данные в поле result_tf
  8.     result_tf.text=loader.data;
  9. }



C помощью GET запроса можно передать данные php скрипту.
  1. var gid = '17157755';
  2. var mess = 'flapps.ru';
  3.  
  4. var loader:URLLoader = new URLLoader();
  5. var request:URLRequest=new URLRequest('http://flapps.ru/script.php' + '?gid=' + gid + '&mess=' + mess + '&' + Math.random());
  6. loader.addEventListener(Event.COMPLETE, onComplete);
  7. loader.load(request);
  8.  
  9. function onComplete(event:Event):void {
  10.     // выводим полученные данные в поле result_tf
  11.     result_tf.text=loader.data;
  12. }

Первый параметр присоединяется с помощью знака "?", остальные с помощью знака "&".

PHP
  1. <?
  2. // получаем параметры
  3. $param1 = $_GET['gid'];
  4. $param2 = $_GET['mess'];
  5.  
  6. // можно сделать что-то с полученными данными, например вывести
  7. echo $param1;
  8. echo $param2;
  9. ?>

С помощью GET запроса не стоит передавать большие параметры, данные могут дойти не целиком. Используйте метод POST.



Отправка POST запроса php скрипту, передача параметров
AS3
  1. var gid = '17157755';
  2. var mess = 'flapps.ru';
  3.  
  4. var loader:URLLoader = new URLLoader();
  5. var request:URLRequest=new URLRequest('http://flapps.ru/script.php'); // адрес вашего скрипта
  6. request.method=URLRequestMethod.POST;
  7.  
  8. var vars:URLVariables = new URLVariables();
  9. vars['gid']=gid;
  10. vars['mess']=mess;
  11.  
  12. request.data=vars;
  13. loader.addEventListener(Event.COMPLETE, onComplete);
  14. loader.load(request);
  15.  
  16. function onComplete(event:Event):void {
  17.     // выводим полученные данные в поле result_tf
  18.     result_tf.text=loader.data;
  19. }

При отправке данных методом POST, данные не кэшируются, добавлять случайную переменную нет необходимости.

PHP
  1. <?
  2. // получаем параметры
  3. $param1 = $_POST['gid'];
  4. $param2 = $_POST['mess'];
  5.  
  6. // можно сделать что-то с полученными данными, например вывести
  7. echo $param1;
  8. echo $param2;
  9. ?>



Если у вас что-то не получается и вы не знаете почему, то посмотрите урок Отладка приложений, взаимодействующих с сервером (Charles).

За это сообщение автора Александр поблагодарили - 6:
Abarmotina, Deniska, fast_andrew, Gouk, Happy, Newred
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



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

Сообщение Богдан » 11 июл 2011, 02:20

Спасибо огроменное!
Аватара пользователя
Богдан

 
Сообщения: 21
Зарегистрирован: 26 дек 2010, 05:22
Благодарил (а): 4 раз.
Поблагодарили: 2 раз.

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

Сообщение swing1991 » 11 июл 2011, 17:55

swing1991

 
Сообщения: 42
Зарегистрирован: 08 ноя 2010, 20:31
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.

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

Сообщение kostya74 » 23 сен 2011, 05:39


То есть flapps.ru от эту ссылку и отправит? А приложение выведет? И всё в одну строчку php скрипта?
kostya74

 
Сообщения: 59
Зарегистрирован: 09 авг 2011, 11:25
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.

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

Сообщение kostya74 » 23 сен 2011, 11:03

получилось)
kostya74

 
Сообщения: 59
Зарегистрирован: 09 авг 2011, 11:25
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.

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

Сообщение bubbless » 14 июл 2012, 15:30

У меня при методе GET Вот что выдаёт
1120: Обращение несуществующего свойства loader.
Where??
bubbless

 
Сообщения: 28
Зарегистрирован: 17 июн 2012, 13:08
Откуда: Запорожье
Благодарил (а): 8 раз.
Поблагодарили: 0 раз.

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

Сообщение Александр » 15 июл 2012, 16:42

bubbless
Попробуй добавить
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

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

Сообщение Agiliter » 16 фев 2014, 09:19

Написал на as3
  1. package  
  2. {
  3.     import flash.utils.*;
  4.     import flash.display.*;
  5.     import flash.errors.*;
  6.     import flash.events.*;
  7.     import flash.net.*;
  8.     //import flash.display.Sprite;    
  9.     //import flash.net.URLVariables;
  10.     //import flash.net.sendToURL;
  11.     //import flash.errors.IOError; 
  12.  
  13.     public class Main extends Sprite
  14.     {
  15.         private var loader:URLLoader;
  16.         private var request:URLRequest;
  17.        
  18.         public function Main()
  19.         {
  20.             loader = new URLLoader();
  21.             request = new URLRequest('http://flashtest1.ru/script.php');
  22.             //request = new URLRequest('Z:\\home\\FlashTest1.ru\\www\\script.php');
  23.             loader.load(request);
  24.             loader.addEventListener(Event.COMPLETE, GOOD_TEST);
  25.             loader.addEventListener(IOErrorEvent.IO_ERROR, BAD_TEST);
  26.         }
  27.        
  28.         private function GOOD_TEST(e:Event):void
  29.         {
  30.             trace("Good! ");
  31.         }
  32.  
  33.         private function BAD_TEST(e:IOErrorEvent):void
  34.         {
  35.             trace("File not found! Ошибка:" + e);
  36.         }
  37.        
  38.     }
  39.  
  40. }

Использую денвер для локального тестирования. php скрипт находится по адресу Z:\\home\FlashTest1.ru\www\script.php

В результате выдает ошибку:
Ошибка при открытии 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"]

В чем может быть причина?
С уважением,
М.Ф.
Agiliter

 
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

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

Сообщение sasha^ » 17 фев 2014, 16:36

может денвер не запущен?)) если только создан домен - нужно его перезапустить...
но ошибка явно говорит что не может открыть файл))))
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

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

Сообщение Agiliter » 17 фев 2014, 18:26

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


Да, ошибка дурацкая была. Скрипт назывался sript.php. Букву пропустил))
С уважением,
М.Ф.
Agiliter

 
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

След.

Вернуться в Уроки на другие темы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron