Curs Flash

Una din principalele abilitati a unei aplicatii Web trebuie sa fie comunicarea acesteia cu serverul, posibilitatea de a trimite date catre server si sa primeasca raspuns de la el.
Flash, prin ActionScript are posibilitatea de a trimite si primi date catre server.
- In acest tutorial e prezentat modul de trimitere a unui continut de date XML din ActionScript la un script PHP, printr-o prezentare Flash (SWF).


Pe scurt:
  1. In ActionScript se defineste o variabila (tip String) in care sunt adaugate datele XML, sub forma de sir.
  2. Intr-o instanta de obiect "URLRequest" se adauga adresa fisierului cu scriptul PHP (prezentarea Flash si scriptul PHP trebuie sa fie pe acelasi server, de preferinta in acelasi director).
  3. La aceasta instanta se adauga, cu data, datele XML din variabila, apoi, cu contentType se defineste tipul lor ca "text/xml", precum si metoda de trimitere POST, cu URLRequestMethod.POST
  4. Se defineste un obiect de tip URLLoader prin care vor fi trimise datele si tot prin el se primeste raspunsul de la server
  5. La instanta acestui obiect se inregistreaza un eveniment "Event.COMPLETE" (prin care se detecteaza cand e primit raspunsul de la server) si un eveniment "IOErrorEvent.IO_ERROR" (pentru detectarea vreunei erori care ar putea sa apara la transferul datelor).
  6. Se definesc functiile ce trebuie apelate de aceste evenimente si un camp de text (TextField) in care sa fie afisat raspunsul primit
  7. Ultimul pas, cu functia load() se trimit datele XML (ca argument al ei), aplicata la instanta de obiect "URLLoader".

Mai jos e codul ActionScript cu aceste instructiuni si scriptul PHP care va primi si salva datele XML intr-un fisier pe server (aici intr-un director "xmls").
- Explicatii mai detaliate gasiti in comentariile din fiecare script.
- Important: Mai intai trebuie creat directorul "xmls" pe server, in acelasi loc unde e si scriptul PHP, si acordate permisiuni de scriere CHMOD 0777 (daca e pe Linux).

Codul ActionScript

// https://marplo.net/flash

// Campul text in care va fi afisat raspunsul de la server
var respTxt:TextField = new TextField();

// Variabila in care va fi retinut raspunsul de la server
var re_server:XML;

// Aici se poate incarca si edita date XML, apoi transformate in sir, cu toXMLString()

// Sirul cu datele XML
var xml_str:String = '<?xml version="1.0" encoding="UTF-8"?><root><value>marplo.net</value></root>';

// Se defineste obiectul cu adresa fisierului PHP si modul de transmitere a datelor
var php_url:URLRequest = new URLRequest("savexml.php");       // Obiectul cu adresa fisierului
php_url.data = xml_str;                                   // Adauga datele
php_url.contentType = "text/xml";                         // Defineste tipul continutului trimis
php_url.method = URLRequestMethod.POST;                   // Metoda de transmitere - POST

var obj_send_load:URLLoader = new URLLoader();          // Instanta de obiect prin care vor fi trimise

// Definire Eveniment ce detecteaza cand datele sunt trimise complet si raspunsul e primit
obj_send_load.addEventListener(Event.COMPLETE, onComplete, false, 0, true);

// Definire Eveniment care e declansat in caz de erore la transferul datelor
obj_send_load.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);

// Functia apelata de Evenimentul declansart cand transferul e finalizat
function onComplete(evt:Event):void
{
  // Se foloseste try ... catch pt. a retine si personaliza eventuala eroare
  try
  {
    re_server = XML(evt.target.data);        // Retine ca XML raspunsul primit de la Server
    respTxt.text = re_server;                // Adauga in campul de text raspunsul primit
  }
  catch (err:TypeError)
  {
    // Daca e generata vreo eroare, o retine si o include in campul de text
    respTxt.text = "Eroare la procesare raspuns de la server:\n" + err.message;
  }

  // Sterge inregistrarea evenimentelor, pt. a elibera memoria
  removeEventListener(Event.COMPLETE, onComplete);
  removeEventListener(IOErrorEvent.IO_ERROR, onIOError);

  placeText();       // Apeleaza functia care afiseaza in prezentarea Flash campul de text
}

// Functia apelata de evenimentul ce se declanseaza la aparitia vreunei erori de transfer
function onIOError(evt:IOErrorEvent):void
{
  // Preia eroarea, o personalizeaza si o adauga in campul de text
  respTxt.text = "Eroare la trimiterea datelor XML.\n" + evt.text;
  placeText();       // Apeleaza functia care afiseaza in prezentarea Flash campul de text
}

// Functia care afiseaza in prezentarea Flash campul de text
function placeText():void
{
  // Se definesc proprietatile zonei de text (distanta, multiline, aliniere, bordura)
  respTxt.x = 5;
  respTxt.y = 15;
  respTxt.multiline = true;
  respTxt.autoSize = TextFieldAutoSize.LEFT;
  respTxt.border = true;

  addChild(respTxt);        // Adauga campul de text in Flash
}

// Se executa trimiterea datelor, cu metoda load() ce le contine ca argument
obj_send_load.load(php_url);

Codul PHP

<?php
// https://marplo.net

// Calea si numele fisierului XML pe server
$xml_file = 'xmls/test.xml';

// Retine ca sir datele primite prin POST
$xml_data = $HTTP_RAW_POST_DATA;

// Daca datele din $xml_data sunt salvate pe server (in locatia de la $xml_file)
// Le afiseaza /Returneaza ca raspuns
// Daca nu pot fi salvate, returneaza un mesaj de eroare
if(file_put_contents($xml_file, $xml_data)) echo $xml_data;
else echo 'Eroare, datele XML nu au putut fi salvate pe server, la'. $xml_file;
?>

• Pentru test, copiati codul ActionScript intr-un document Flash nou (in panoul pt. AS) si creati prezentarea Flash, de la meniul File -> Export -> Export Movie.
Creati si un fisier PHP, denumit "savexml.php", in care trebuie adaugat codul de mai sus. Sau folositi fisierele din arhiva ce poate fi descarcata prin link-ul de mai jos.
Fisierul SWF rezultat si "savexml.php" copiati-le pe server, iar in acelasi loc creati un director denumit "xmls" si acordati-i permisiuni CHMOD 0777.
Apelati in browser adresa fisierului SWF de pe server ( http:server/fisier.swf ).
Daca totul e facut bine, in browser va apare prezentarea Flash cu un camp de text in care sunt afisate datele XML trimise la PHP, dupa cum se vede mai jos, iar in directorul "xmls" de pe server veti gasi un fisier "test.xml".
<root>
    <value>marplo.net</value>
</root>

Datele XML din ActionScript pot fi incarcate dintr-un fisier extern si prelucrate inainte de a fi trimise la server. Esential este ca acestea sa fie transformate in sir (String) inainte de trimitere.
- Despre incarcarea si prelucrarea datelor XML in Flash vedeti lectiile de la sectiunea ActionScript 3.0.


Arhiva cu documentul FLA, prezentarea SWF si scriptul PHP poate fi descarcata de la: Tutorial XML - ActionScript - PHP.

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce atribut e folosit in tag-ul <img> pentru adresa imaginii?
href src rel
<img src="http://coursesweb.net/imgs/webcourses.gif" width="191" height="63" alt="Courses-Web" />
Care din aceste coduri CSS ascunde elementul in pagina?
display: none; display: inline; position: relative;
#id {
  display: none;
}
Ce instructiune opreste executia lui while() sau for() ?
continue prompt() break
for(var i = 0; i< 8; i++) {
  if(i > 1) break;
  alert(i);
}
Indicati functia utilizata pentru a crea constante.
define() include() defined()
define("CONSTANT_NAME", "value");
echo CONSTANT_NAME;
Care este forma de plural a substativului "class" (clasa)?
classes clases clasis
This school has three classes.
- Scoala asta are trei clase.
Care este pluralul substativului "voz" (voce)?
vose voze voces
Escuché dos voces.
- Am auzit doua voci.
Trimitere date XML din ActionScript la server PHP

Last accessed pages

  1. Script Mini-Trafic site (521)
  2. CSS3 - Background proprietati noi (893)
  3. Clase PHP Utile (661)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (85581)
  5. Creare Meniu cu Multiple Nivele (590)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (5255)
  2. Curs HTML gratuit Tutoriale HTML5 (4326)
  3. Curs si Tutoriale JavaScript (3544)
  4. Prezentul simplu si continuu - Present Tense Simple and Continuous (3468)
  5. Curs PHP MySQL, Tutoriale si Scripturi PHP (3378)