Chamando URLs externas
No ActionScript 2.0, para chamar uma URL externa, utilizávamos o método getURL, que pedia uma String contendo o caminho da URL.
No ActionScript 3.0, todo caminho de URL é do tipo URLRequest, que pede como parâmetro uma String contendo o caminho da URL. Isso vale para qualquer chamado externo, seja com caminho local ou global.
Na nova versão podemos armazenar em arquivos externos não somente classes e interfaces, mas também funções, como é o caso abaixo com o navigateToURL que substitui o getURL.
import flash.net.URLRequest;
import flash.net.navigateToURL;
var chama:URLRequest = new URLRequest("http://www.leandroamano.com.br");
navigateToURL(chama);
Lendo arquivos externos (.txt e .xml)
O conteúdo do site deve sempre estar bem dividido para que assim haja uma fácil manutenção para o administrador do site, bem como fácil acesso dos usuários. Neste artigo iremos observar como funciona o carregamento de dados textuais externos, da maneira mais simples possível.
Também podemos utilizar XML ou Flash Remoting (sistema AMF) para envio e recebimento de dados com o servidor, através de chamadas assíncronas. Este último foi estudado no artigo anterior.
Existe uma série de utilidades para usar o servidor como acesso e/ou envio de dados, que incluem:
- Enviar valores de um formulário para armazenamento num banco de dados.
- Enviar valores de um formulário para um ou mais e-mails.
- Carregar valores de um texto para criação de links ou novidades.
- Carregar valores a partir de um arquivo de servidor para exibição de uma aplicação simples como uma galeria de fotos, ou mesmo uma aplicação mais complexa como um e-commerce.
- Enviar valores e aguardar uma resposta como, por exemplo, um acesso restrito de usuário e senha.
A forma de acesso a esses dados é dada em pares de valores, por exemplo, nome=valor.
Quando se tem mais pares de valores, é necessário utilizar o símbolo &, por exemplo, nome=valor&nome2=valor2
Carregando arquivos de dados externos
O objeto usado será o URLLoader que substitui o LoadVars do ActionScript 2.0.
Para carregar dados externos definiremos dois arquivos, o primeiro um texto simples, e o segundo um arquivo de servidor, em nosso exemplo o ColdFusion.
O formato de retorno vem em valores em pares, ou seja, variável=valor, determinamos então que o formato é: (flash.net.URLLoaderDataFormat.VARIABLES)
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.load(new URLRequest("texto.txt"));
É necessário saber também quando os dados estão disponíveis. O evento event.COMPLETE nos avisa e, quando executado, podemos aplicar um loop no resultado:
function handleComplete(event:Event):void {
trace("O Resultado pode ser apresentado");
for (var i:String in resposta.data) {
trace(i + " = "+ resposta.data[i]);
}
}
Um exemplo completo pode ser observado abaixo:
//Arquivo texto.txt
nome=Leandro+Amano&numero=1234
//Arquivo index.cfm
<cfsetting enablecfoutputonly="yes">
<cfprocessingdirective suppresswhitespace="yes">
<cfset someText = "teste">
<cfoutput>someText=#someText#</cfoutput>
</cfprocessingdirective>
//Arquivo .fla
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.events.IOErrorEvent;
import flash.events.HTTPStatusEvent;
import flash.events.SecurityErrorEvent;
import flash.events.Event;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, handleHTTPStatus);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);
loader.addEventListener(Event.COMPLETE, handleComplete);
//loader.load(new URLRequest("texto.txt"));
loader.load(new URLRequest("http://localhost:8500/as3/index.cfm"));
function handleIOError(event:IOErrorEvent):void {
trace("Loade failed: IO error: "+event.text);
}
function handleHTTPStatus(event:HTTPStatusEvent):void {
trace("Load status: HTTP status: "+event.status);
}
function handleSecurityError(event:SecurityErrorEvent):void {
trace("Load failed: Security Error: "+event.text);
}
function handleComplete(event:Event):void {
trace("The data has successfully loaded");
var resposta:URLLoader = URLLoader(event.target);
trace(resposta.data.nome);
trace(resposta.data.numero);
for (var i:String in resposta.data) {
trace(i + " = "+ resposta.data[i]);
}
}
Objeto XML
Desde o ActionScript 1 (Flash Player 5) o Flash possuía a capacidade de ler objetos XML externos, baseados no DOM (W3C Document Object Model), o padrão para interação com documentos XML.
Em ActionScript 3.0 a classe XML foi totalmente modificada. XML é um tipo nativo do Flash, antigos métodos e propriedades para a leitura desses dados externos (firstChild, childNodes, etc) se encontram agora na classe XMLDocument, localizada no pacote flash.xml.
A ActionScript 3.0 implementa o padrão ECMAScript for XML (E4X) que não será discutido agora.
//Top Level class XML
var xml:XML = <doc>
<curso>ActionScript 3.0</curso>
<curso>Adobe Flex 3</curso>
<curso>Adobe Dreamweaver CS3</curso>
<curso>Adobe ColdFusion 8</curso>
</doc>;
Lendo um XML externo
Para a leitura de um XML externo utilizaremos uma leitura de arquivo externo comum como vimos acima. Dentro do evento Event.COMPLETE, trataremos o objeto lido como um XMLDocument.
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.xml.XMLDocument;
import flash.events.Event;
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, onComplete);
loader.load(new URLRequest("xml_externo.xml"));
function onComplete(e:Event):void {
var xml:XML = XML(e.currentTarget.data);
var xmlDoc:XMLDocument = new XMLDocument();
xmlDoc.ignoreWhite = true;
xmlDoc.parseXML(xml);
var tamanho:uint = xmlDoc.firstChild.childNodes.length;
for(var i:uint; i<tamanho; i++){
// ActionScript 3.0
// Adobe Flex 3
// Adobe Dreamweaver CS3
// Adobe ColdFusion 8
trace(xmlDoc.firstChild.childNodes[i].firstChild.nodeValue);
}
}