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
Care tag e folosit pentru a adauga liste cu definitii in element <dl>?
<dt> <dd> <li>
<dl>
 <dt>HTML</dt>
  <dd> - Hyper Text Markup Language</dd>
  <dd> - Limbaj de cod pentru pagini web</dd>
</dl>
Care proprietate CSS poate sa ascunda un element in pagina, lasand spatiu gol in locul lui?
display position visibility
#id {
  visibility: hidden;
}
Indicati evenimentul declansat cand se apasa clic pe un obiect in pagina.
onclick onmouseover onfocus
document.getElementById("id").onclick = function(){
  alert("http://www.MarPlo.net/");
}
Indicati variabila PHP ce contine datele din $_GET, $_POST si $_COOKIE.
$_SESSION $_GET $_REQUEST
if(isset($_REQUEST["id"])) {
  echo $_REQUEST["id"];
}
Care din urmatoarele cuvinte reprezinta un Verb?
lighting believe path
I believe in my path.
- Eu cred in calea mea.
Care din urmatoarele cuvinte reprezinta un Verb?
creer camino iluminación
creer = a crede; camino = cale /drum; iluminación = iluminare
Trimitere date XML din ActionScript la server PHP

Last accessed pages

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (56140)
  2. Lumea Lipsiăta de Vinovăţie (1)
  3. Iertarea şi Relaţia Sfântă (5)
  4. Acceptarea Ispasirii (1)
  5. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (37424)

Popular pages this month

  1. Prezentul simplu si continuu - Present Tense Simple and Continuous (3734)
  2. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (3495)
  3. Gramatica limbii engleze - Prezentare Generala (2830)
  4. Prezent perfect si Prezent perfect continuu - Present perfect and Continuous (2412)
  5. Trecutul simplu si continuu - Past Tense Simple and Continuous (2027)