动作脚本 XML 类的方法(例如 appendChild()
、removeNode()
和 insertBefore()
)使您可以在 Flash 中组织要发送到服务器的 XML 数据,并且它们还可以操作和解释下载的 XML
数据。
下面的 XML 类方法使用 HTTP POST
方法将 XML 数据发送并加载到服务器。
load()
方法从某个 URL 下载 XML,并将其放在一个动作脚本 XML 对象中。send()
方法向 URL 传递 XML 对象。返回的任何信息都被发送到另外一个浏览器窗口。sendAndLoad()
方法向 URL 发送 XML 对象。返回的任何信息都放在一个动作脚本 XML 对象中。例如,您可创建一个代理系统,它在数据库中存储它的所有信息(用户名、密码、会话 ID、公文包以及事务信息)。
在 Flash 和数据库之间传递信息的服务器端脚本以 XML 格式读出和写入数据。可用动作脚本将 SWF 文件中收集到的信息(例如,用户名和密码)转换成一个 XML 对象,然后将数据作为 XML 文档发送到服务器端脚本。您还可以使用动作脚本加载服务器返回到 XML 对象中的 XML 文档,该文档将在 SWF 文件中使用。
Flash 影片、服务器端脚本和数据库之间的数据流以及数据转换
代理系统的密码验证需要两个脚本:一个在第 1 帧中定义的函数,一个脚本,该脚本创建和发送附加到窗体中“Submit”按钮的 XML 对象。
当用户用变量 username
和 password
将他们的信息输入到 SWF 文件中的文本字段时,变量必须先转换成 XML 再发送到服务器。脚本的第一部分将变量加载到新创建的名为 loginXML
的 XML 对象中。当用户单击“Submit”按钮时,loginXML
对象先被转换成 XML 字符串,然后发送到服务器。
下面的脚本附加到“Submit”按钮。为了理解此脚本,请阅读注释行(用字符 //
表示):
on (release) { // A. Construct an XML document with a LOGIN element loginXML = new XML(); loginElement = loginXML.createElement("LOGIN"); loginElement.attributes.username = username; loginElement.attributes.password = password; loginXML.appendChild(loginElement); // B. Construct an XML object to hold the server's reply loginReplyXML = new XML(); loginReplyXML.onLoad = onLoginReply; // C. Send the LOGIN element to the server, // place the reply in loginReplyXML loginXML.sendAndLoad("https://www.imexstocks.com/main.cgi", loginReplyXML); }
当用户单击“Submit”按钮时,脚本的第一部分生成下面的 XML:
<LOGIN USERNAME="JeanSmith" PASSWORD="VerySecret" />
服务器接收到这个 XML,生成一个 XML 响应,然后将它回送给 SWF 文件。如果接受了该密码,服务器会通过下面的代码进行响应:
<LOGINREPLY STATUS="OK" SESSION="rnr6f7vkj2oe14m7jkkycilb" />
这个 XML 包括一个 SESSION
属性,该属性包含一个唯一的随机生成的会话 ID,它将被用在该会话其余部分客户端和服务器之间的所有通讯中。如果拒绝了该密码,服务器会通过下面的消息进行响应:
<LOGINREPLY STATUS="FAILED" />
LOGINREPLY
XML 节点必须加载到 SWF 文件的空白 XML 对象中。下面的语句创建 XML 对象 loginreplyXML
来接收 XML 节点:
// B. Construct an XML object to hold the server's reply loginReplyXML = new XML(); loginReplyXML.onLoad = onLoginReply;
第二个语句将 onLoginReply()
函数指定给 loginReplyXML.onLoad
处理函数。
LOGINREPLY
XML 元素异步到达(与从 loadVariables()
函数得出的数据类似),然后加载到 loginReplyXML
对象中。当数据到达时,即会调用 loginReplyXML
对象的 onLoad
处理函数。您必须定义 onLoginReply()
函数,然后将其指定给 loginReplyXML.onLoad
处理函数,以便它可以处理 LOGINREPLY
元素。您还必须将 onLoginReply()
函数指定给包含“Submit”按钮的帧。
onLoginReply()
函数是在 SWF 文件的第 1 帧中定义的。(为了理解此脚本,请阅读注释行。)
function onLoginReply() { // Get the first XML element var e = this.firstChild; // If the first XML element is a LOGINREPLY element with // status OK, go to the portfolio screen.Otherwise, // go to the login failure screen and let the user try again. if (e.nodeName == "LOGINREPLY" && e.attributes.status == "OK") { // Save the session ID for future communications with server sessionID = e.attributes.session; // Go to the portfolio viewing screen gotoAndStop("portfolioView"); } else { // Login failed!Go to the login failure screen. gotoAndStop("loginFailed"); } }
该函数的第一行 var e = this.firstChild
使用关键字 this
来引用刚刚从服务器通过 XML 加载的 XML 对象 loginReplyXML
。您可以使用 this
,原因是 onLoginReply()
已作为 loginReplyXML.onLoad
进行调用,所以尽管 onLoginReply()
看上去是一个标准函数,实际上它充当 loginReplyXML
的一个方法。
要以 XML 的形式将用户名和密码发送到服务器,然后将 XML 响应加载到 SWF 文件中,您可以使用 sendAndLoad()
方法,如下所示:
// C. Send the LOGIN element to the server, // place the reply in loginReplyXML loginXML.sendAndLoad("https://www.imexstocks.com/main.cgi", loginReplyXML);
注意:这个设计方案只是一个例子,Macromedia 不保证它的安全性级别。如果您正实施一个安全的密码保护系统,请确保对网络安全有很好的理解。
有关更多信息,请参见“在 Web 应用程序中集成 XML 和 Flash”和 XML 类。