使用XML实现Flash与服务器通信
来源:互联网 发布:php第三方登录原理 编辑:程序博客网 时间:2024/05/21 07:54
这是一篇讲解如何使用XML实现Flash与通信的入门级实例教程。通过本例的学习,我们将了解使用XML开发Flash RIAs的基本流程。
从Flash Player 5开始,就可以使用XML对象来实现Flash与后台通信。Flash浏览器与XML数据之间的直接进行数据交换,并且同LoadVars函数一样,都是以字符串形式传递的。后台语言作为XML数据和数据库的中介,负责将数据库的数据动态生成XML,将XML变动的数据更新回数据库。如下图所示:
XML对象可比LoadVars对象高级多了,它处理的是XML元素,XML元素本身有意义而且格式良好,利用我们和电脑识别, 它早已成为数据交换格式的标准。而LoadVars用来处理变量,LoadVars中的变量很少有什么实际意义,如果用来读取数据库中的数据,变量会 很多。而XML对象就简单多了,与XML相关的技术很多,比如DOM、SOM、SMLT、SAX2等。即使你对这些技术不了解,你也可以用后台语言输出数 据的方式来实现。如果你对而且服务器端脚本语言的输出数据的格式不了解,请看一下http://www.riafan.com/article/flash/flash-exchange-date-with-server.html。
使用XML对象来实现Flash与后台通信,主要是通过XML对象的sendAndLoad方法。该方法和LoadVars的sendAndLoad方法 类似,它把指定的XML对象编码为XML文档,使用POST方法将其发送到指定的URL,下载服务器的响应,并将其加载到参数中指定的 resultXMLobject 中。服务器响应加载的方式与 XML.load方法使用的方式相同。
下面是一个简单的ASP+XML+Flash查询实例。XML.sendAndLoad方法传输一个包含学生姓名的XML包,并使用onLoad方法来处理来自服务器的响应。
import mx.controls.Alert;//新建用来响应的XML对象var response_xml= new XML();//响应时忽略XML空白response_xml.ignoreWhite = true;function showResult() {//清除所有项目student_dg.removeAll();response_xml.onLoad = function() {var nodes = this.firstChild.childNodes;var len = nodes.length;if (len < 1) {Alert.show("没有搜索到相应的记录!", "提示信息");} else {//将XML对象解析成项目对象for (var i=0; i < len; i++) {student_dg.addItem({学号:nodes[i].attributes.id,姓名:nodes[i].attributes.name, 班级:nodes[i].attributes.cname});}}}}//新建用来发送请求的XML对象var request_xml = new XML();//创建一个新的 元素searchelement = request_xml.createElement("student");function click() {//将输入的学生姓名赋值给search元素name属性element.attributes.name = name_ti.text;//将search元素追加到 对象中request_xml.appendChild(element);//传输一个包含学生姓名的XML包request_xml.sendAndLoad("http://localhost/student/search.asp",response_xml);showResult();}search_btn.addEventListener("click", this);
后台以ASP为例,ASP要能读取SWF文件请求的XML元素,得用XML DOMDocument,这就要求服务器必须安装有MSXML2.DOMDocument组件。至于ASP怎样输出动态XML文件,可以用ASP的Response.Write方法,当然同样也可以用XML DOMDocument对象来实现。不过,理论上前者的速度会快些。
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%<%//建立XML DOM对象var doc = new ActiveXObject("MSXML2.DOMDocument");doc.async =false;var requestXml=Request.Form();//判断是否接收到SWF文件传过来的XML包if(requestXml.Count >0){//加载XML包doc.loadXML(requestXml);//取得根元素var rootNode = doc.documentElement;//取得根元素的name属性值var name = rootNode.attributes[0].nodeValue;//设定为XML文件Response.ContentType="text/xml";//输出XML文件声明Response.Write("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");var conn = new ActiveXObject("ADODB.CONNECTION");strconn = "DBQ="+Server.MapPath("Exam.mdb")+";Driver={Microsoft Access Driver (*.mdb)};";conn.Open(strconn);var rs = new ActiveXObject("ADODB.RECORDSET");var sql = "Select StudentID,Name,ClassName FROM Student Where Name LIKE '"+name+"%'";rs.Open(sql,conn,1,1);var i=0;//输出根标记Response.Write("<item>");while(!rs.EOF){//输出子元素及其属性Response.Write("<student id=/""+rs("StudentID")+"/" name=/""+rs("Name")+"/" cname=/""+rs("ClassName")+"/"/>");i++;rs.MoveNext(); }Response.Write("</item>");rs.Close();conn.Close();}%>
点击此处查看实例效果,点击此处下载附件,该附件中还包含此实例的各版本后台脚本。
注意:
- 测试PHP版时,由于使用了$GLOBALS["HTTP_RAW_POST_DATA"]全局变量,请打开php.ini,将always_populate_raw_post_data = On前的;去掉;这是一种不得以的方法,如果有哪位找到好方法,请告诉我一下。
- 对于CF版,因为在交换数据的过程中,CF解析XML时不接受汉字。因此,我们需要在Flash中将要传送传送的参数进行URL 编码,请将name_ti.text修改为escape(name_ti.text)。
其实,我个人并不主张用XML来实现Flash与服务器端的通信,我宁愿用LoadVars和Flash Remoting。
http://www.riafan.com/article/flash/flash-exchangedata-with-xml.html
- 使用XML实现Flash与服务器通信
- 使用LoadVars实现Flash与服务器通信
- 使用LoadVars实现Flash与服务器通信
- 使用Fluorine实现Flash与.NET通信
- 使用Flash Remoting实现Flash与ColdFusion 通信
- Flash与服务器通信简介
- 使用xml--flash与ASP通信的几种方法
- 实现flash与javacript通信。
- 使用Flash Remoting实现Flex与ColdFusion通信
- 使用Fluorine实现Flash与.NET之间的Remoting通信
- flash用XML与java通信
- Flash与html及服务器的通信
- flash/flex 与服务器socket通信
- 实现flash与asp.net通信【转】
- Socket 通信实现 Flash 与Java连接
- 使用BlazeDS实现Flex与JEE服务器通信
- C# 使用Socket实现服务器与客户端的通信
- WebSocket实现与服务器通信
- 台灣的心跳聲
- java 向服务器段发报文。
- 利用容器来拆分字符串
- Java中关于农夫过河的问题
- Sqlite DB
- 使用XML实现Flash与服务器通信
- DataTable 合并行或列
- 针对网上VC和GCC效率争论,我有想法
- 收缩日志
- 在XP+IIS5.1上构建ASP.NET MVC1.0开发环境并布署网站的经验
- CEikEdwin 使用小结
- windows vista下的gcc环境 可用的c/c++编译器
- 那些诗歌
- 那些诗歌