`
ch_kexin
  • 浏览: 897829 次
  • 性别: Icon_minigender_2
  • 来自: 青岛
社区版块
存档分类
最新评论

AS3与后台交互【一】

 
阅读更多
AS3 中使用 URLLoader 与 URLRequest 取代了先前版本 LoadVars 方法. 初学者可能又会迷糊了.
在现在帮助系统没有完善的情况下 (Flash 9 没有帮助, Flex Builder 2 的只有英文), 这里写篇简单的教程, 方便大家往 AS3 过渡.


在 AS3 中, 有关于网络操作的内置类全部在 flash.net 里. 下面是本教程要用到的类的清单 :

URLLoader : 用于从网络或者本地读取文件, 可以通过设置他的 dataFormat 属性改变收到的文本类型.
与 AS2 的 LoadVars 不同的是, 他的默认值 URLLoaderDataFormat.TEXT 即纯文本格式, 所以在读取外部文本变量的时候得修改一下他的 dataFormat 为 URLLoaderDataFormat.VARIABLES. 不过在 AS2 中没有该属性, 取代的是 contentType 属性.
URLRequest : 用于传递变量到服务器, 以及 URLLoader 要 load 的目标路径. 可以通过设置他的 contentType 属性改变发送到服务器的变量类型, 默认是 application/x-form-urlencoding, 也就是 URLEncode 编码.
URLVariables : 用于配置传递到服务器变量的键 / 值集合, 如 user1=Kakera&user2=Eigo.
URLLoaderDataFormat : 用于设置 URLLoader 读取文件的类型, 有 TEXT (纯文本), VARIABLES (URLEncoding 的键 / 值集合), BINARY (2 进制格式), URLLoader 会根据相应的类型进行解码操作, 如解码 URLEncode

同时还有其他不常用的 :
URLRequestMethod : 决定使用哪种方式传递数据到服务器, POST 或者 GET.
URLReqeustHeader : 用于配置传递到服务端的 HTTP 标头.


值得一提的是, URLLoader 还有相当完整的事件让我们来获取读取数据的状态, 下面是有关 URLLoader 事件的清单.

complete : 使用 URLLoader.load() 方法后, 数据完全加载完毕时触发, 通常如果能够触发这个事件的话, 说明你的程序没有问题.
httpStatus : 使用 URLLoader.load() 方法后, 获取 HTTP 状态代码时触发, 通过判断他的 state 属性我们可以获得远程文件的加载状态. 成功 (200), 没有权限 (403), 找不到文件 (404), 服务器内部错误 (500) 等等. 这个事件总是在 compelete 之前被触发.
ioError : 使用 URLLoader.load() 方法时, 发生致命错误时触发, 我还没碰到过..
open : 使用 URLLoader.load() 方法后, 开始从服务器下载数据时触发一次, 此时的 URLLoader.bytesLoaded 一定是 0.
progress : 使用 URLLoader.load() 方法后, 在从服务器下载数据的过程中持续触发, 通过侦听他的变化我们可以很方便的为 URLLoader 做加载状态的显示.
securityError : FlashPlayer 的安全错误, 比如跨域加载, 从硬盘 (文件系统) 发送 / 读取服务器上的数据.


关于注册侦听器的建议

flashplayer 内置类的所有事件都有相关事件类常量来表示, 推荐使用他们来注册事件侦听器. 而所有的内置类的事件类 (Event) 全部在 flash.events 包中
如使用
import flash.events.Event;
urlLoaderInstance.addEventListener(Event.COMPLETE, completeHandler);

来代替
urlLoaderInstance.addEventListener("complete", completeHandler);


下面是 URLLoader 支持的事件所对应类的清单, 他们可以在 Flex Builder 2 的文档中找到
complete : Event.COMPLETE
httpStatus : HTTPStatusEvent.HTTP_STATUS
ioError : IOErrorEvent.IO_ERROR
open : Event.OPEN
progress : ProgressEvent.PROGRESS
securityError : SecurityErrorEvent.SECURITY_ERROR


然后下面是使用 URLLoader 的一些简单的例子
1. 单纯的读取服务器或者硬盘上同目录下叫 Variables.txt 文本文件, 文本的内容是
user1=Kakera&user2=Eigo&user3=Keirago


LoadVariablesOnly.fla
[html]
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.net.URLVariables;
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;


//
// 配置 URLRequest, 设置目标路径等
//

var request:URLRequest = new URLRequest("Variables.txt");


//
// 配置 URLLoader, 注册侦听器等
//

var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, loader_complete);
loader.addEventListener(Event.OPEN, loader_open);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);
loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
loader.load(request);

function loader_complete (e:Event):void {
trace("Event.COMPLETE");
trace("目标文件的原始数据 (纯文本) : " + loader.data);


//
// 使用 URLVariables 处理原始数据并进行遍历同时输出数据
//

var variables:URLVariables = new URLVariables(loader.data);
for (var i in variables) {
trace(i + " : " + variables[i]);
}

}
function loader_open (e:Event):void {
trace("Event.OPEN");
trace("读取了的字节 : " + loader.bytesLoaded);
}
function loader_httpStatus (e:HTTPStatusEvent):void {
trace("HTTPStatusEvent.HTTP_STATUS");
trace("HTTP 状态代码 : " + e.state);
}
function loader_progress (e:ProgressEvent):void {
trace("ProgressEvent.PROGRESS");
trace("读取了的字节 : " + loader.bytesLoaded);
trace("文件总字节 : " + loader.bytesTotal);
}
function loader_security (e:SecurityErrorEvent):void {
trace("SecurityErrorEvent.SECURITY_ERROR");
}
function loader_ioError (e:IOErrorEvent):void {
trace("IOErrorEvent.IO_ERROR");
}
[/html]


2. 提交数据到 ServerSide.asp, 并输出服务器的返回值
ServerSide.asp
[html]<%@LANGUAGE="JSCRIPT" CODEPAGE="65001"%>
<%

//
// 全局 Header, 设置编码, 以及缓存
//

with (Response) {
Charset = "utf-8";
Buffer = true;
Expires = -10;
ContentType = "text/plain";
}

var buffer = "列出所有服务端接收到的变量 : \n";
var i;
var e = new Enumerator(Request.Form);


//
// 遍历集合
//

for (; !e.atEnd(); e.moveNext()) {
i = e.item();
buffer += String(i) + " : " + String(Request.Form(i)) + "\n";
}

Response.Write(buffer);
%>
[/html]

SendAndLoadVariables.fla
[html]import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLLoaderDataFormat;
import flash.net.URLVariables;
import flash.events.Event;
import flash.events.HTTPStatusEvent;
import flash.events.IOErrorEvent;
import flash.events.ProgressEvent;
import flash.events.SecurityErrorEvent;


//
// 配置 URLVariables, 设置传递到服务器的数据
//

var variables:URLVariables = new URLVariables();
variables.userName = "Kakera";
variables.password = "********";


//
// 配置 URLRequest, 设置目标路径, 设置提交的数据, 方法 (POST / GET)
//

var request:URLRequest = new URLRequest("http://localhost/urlloadersample/ServerSide.asp");
request.data = variables;
request.method = URLRequestMethod.POST;


//
// 配置 URLLoader, 注册侦听器等
//

var loader:URLLoader = new URLLoader();


//
// 服务端将要返回的是纯文本数据
//

loader.dataFormat = URLLoaderDataFormat.TEXT;
loader.addEventListener(Event.COMPLETE, loader_complete);
loader.addEventListener(Event.OPEN, loader_open);
loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);
loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);
loader.load(request);

function loader_complete (e:Event):void {
trace("Event.COMPLETE");
trace("目标文件的原始数据 (纯文本) : \n" + loader.data);
}
function loader_open (e:Event):void {
trace("Event.OPEN");
trace("读取了的字节 : " + loader.bytesLoaded);
}
function loader_httpStatus (e:HTTPStatusEvent):void {
trace("HTTPStatusEvent.HTTP_STATUS");
trace("HTTP 状态代码 : " + e.status);
}
function loader_progress (e:ProgressEvent):void {
trace("ProgressEvent.PROGRESS");
trace("读取了的字节 : " + loader.bytesLoaded);
trace("文件总字节 : " + loader.bytesTotal);
}
function loader_security (e:SecurityErrorEvent):void {
trace("SecurityErrorEvent.SECURITY_ERROR");
}
function loader_ioError (e:IOErrorEvent):void {
trace("IOErrorEvent.IO_ERROR");
}
[/html]
分享到:
评论

相关推荐

    与as的后台交互留言系统

    【标题】:“与AS的后台交互留言系统”指的是一个基于PHP技术开发的,能够与ActionScript 3.0(AS3.0)后台进行数据交换的留言系统。这个系统的主要功能是提供用户在网站上留言,并且后台可以接收到这些留言,进行...

    AS3与Kinect

    将AS3与Kinect结合,可以开发出极具创新性的交互式应用,例如手势识别系统,让用户体验到前所未有的操作方式。 在"AirKinectFingerDetectionDemo"这个项目中,我们主要探讨的是如何利用AS3实现对Kinect捕捉到的手势...

    Cairngorm交互示例源文件(JSP后台)

    在本案例中,"Cairngorm交互示例源文件(JSP后台)"可能是一个包含使用Cairngorm框架构建的Flex应用,并与Java服务器端(JSP)进行交互的示例项目。 首先,让我们详细了解一下Cairngorm框架的关键组成部分: 1. **...

    Flash使用XML与后台交互详细教程[ASP].doc

    ### Flash使用XML与后台交互详细教程 #### 一、XML基础知识概述 在开始介绍如何在Flash中使用XML与后台进行交互之前,我们首先需要对XML(Extensible Markup Language,可扩展标记语言)有一定的了解。 ##### XML...

    Flash与C#交互

    1. **Flash External Interface (AS3):** 这是Flash Player提供的一个API,允许ActionScript 3代码(Flash的编程语言)调用JavaScript函数,进而与网页中的C# Web服务或Ajax接口通信。C#服务端可以处理请求并返回...

    最经常遇到的AS3面试题

    本文将对AS3面试中经常遇到的问题进行总结和解释,涵盖了动态加载资源、事件机制、数据类型、字符串处理、垃圾回收器、Flex与后台语言交互等多个方面的知识点。 1. Loader, URLLoader, URLStream的使用场合和区别 ...

    flash as3整站源码php

    这个项目对于学习AS3编程、Flash与PHP交互以及构建动态网站非常有价值。开发者可以通过研究源码了解如何将前端的AS3与后端的PHP协同工作,以及如何组织和管理一个完整的网站项目。同时,这也是一个实际应用示例,...

    freenect_win_as3server

    标题 "freenect_win_as3server" 指示了一个专为Windows平台设计的项目,其目的是在ActionScript 3(AS3)环境中与Microsoft的Kinect设备进行交互。这个项目可能是一个服务器端应用程序,允许AS3客户端通过网络连接到...

    一系列后台模板

    在IT行业中,后台模板是构建Web应用程序不可或缺的一部分。它们为开发者提供了一套预先设计和组织的界面元素,以便快速创建和定制管理界面。"一系列后台模板"这个标题表明,我们正面临一个包含多个不同风格和功能的...

    flex与后台通讯方式

    3. 异步通信:Flex与后台的通信通常是异步的,这意味着在调用后台方法后,程序不会阻塞,而是继续执行其他任务,直到收到结果或错误事件。 4. 数据绑定:Flex支持数据绑定,可以将数据模型直接绑定到UI组件,实时...

    Flash与C#交互全集(bs与cs).rar

    在Flash中,我们可以使用ExternalInterface API来实现与JavaScript的交互,从而间接地与C#后台通信。在B/S场景下,JavaScript可以调用Web服务或PageMethods,C#端处理后返回结果,JavaScript再将这些结果传递给Flash...

    全站 flash 纯站 flash纯站 as3.0 asp sap后台

    标题中的“全站 flash 纯站 flash纯站 as3.0 asp sap后台”表明这个项目是一个基于Flash技术构建的完整网站,且使用了ActionScript 3.0进行编程,同时涉及到ASP(Active Server Pages)和SAP作为后台处理系统。...

    qt和python交互例子

    而"testPython"可能是包含Python代码的文件,可能是一个测试脚本或模块,用于演示Qt与Python的交互。 这个例子提供了学习和实践Qt与Python结合的良好机会,对于希望将Python的灵活性与Qt的GUI功能相结合的开发者来...

    AS后台软件使用指导

    【AS后台软件使用指导】 AS后台软件主要用于4G网络的后台测试和优化,它提供了数据分析和后处理功能,能够帮助工程师深入理解网络性能并解决潜在问题。本文将详细介绍如何使用这款名为Assistant的软件进行数据处理...

    python使用flask与js进行前后台交互的例子

    flask与js进行前后台交互代码如下,后台给前端发数据: python部分: # -*- coding: utf-8 -*- from flask import Flask,jsonify,render_template import json app = Flask(__name__)#实例化app对象 testInfo = {} @...

    WorkerFactory AS3多线程库

    WorkerFactory AS3 多线程库是一个专门为ActionScript 3(AS3)设计的库,它使得在Flash环境中实现多线程操作成为可能。ActionScript是Adobe Flash Player和Adobe AIR平台上的主要编程语言,通常用于创建交互式内容...

    as3软件之手机归属查询

    AS3(ActionScript 3)是Adobe开发的一种脚本语言,主要用于创建富互联网应用程序(RIA),尤其是Flash平台上的交互式内容。在这个“as3软件之手机归属查询”项目中,开发者利用AS3技术构建了一个手机归属地查询软件...

    AS3 多线程

    在ActionScript 3 (AS3)中,多线程是一个重要的概念,它允许程序同时执行多个独立的任务,提高应用程序的响应性和效率。由于AS3主要应用于Adobe Flash Player和Adobe AIR,而这些平台早期版本并不直接支持多线程,...

    as3 + fms3聊天室

    【标题】"AS3 + FMS3聊天室"是一个基于ActionScript 3(AS3)编程语言和Flash Media Server 3(FMS3)技术构建的在线聊天室应用。这个项目提供了一个简单但实用的平台,让多个用户可以实时交流分享信息。 【描述】...

    as3 45度角游戏引擎

    【AS3 45度角游戏引擎】是一个适合初学者的AS3(ActionScript 3)游戏开发项目,它提供了一种实现2D游戏的基本框架,特别关注45度角视角的游戏场景。ActionScript 3是Adobe Flash Player和Adobe AIR平台上的主要编程...

Global site tag (gtag.js) - Google Analytics