下面重点将三种flash请求和接收数据的方法
一、loadVariables
loadVariables(url:String, target:Object, [method:String]) : Void
url:服务端地址。
target:指向接收所加载变量的影片剪辑的目标路径。
method: [可选] - 指定用于发送变量的 HTTP 方法。该参数必须是字符串 GET或 POST。GET方法将变量附加到 URL 的末尾,它用于发送少量的变量。POST方法在单独的 HTTP 标头中发送变量,它用于发送长字符串的变量。
例:一个简单的flash与数据库交互的例子,当鼠标移动到按钮上时,在鼠标旁边以文本框的形式显示按钮的信息(按钮的信息在数据库中存储)。
Flash端请求数据代码:
function ShowInfo()
{
loadVariables("http://10.72.25.203/flashy/FlashService.aspx", _root, "POST");
hezuo_btn.label = "";
}
这样将根影片剪辑上的所有变量发送给了一个aspx服务,并指定用根影片剪辑_root,来接收服务端返回的数据,这样适合变量较少的情况,因为这中方法是将根影片剪辑上的所有变量都发送到了服务端,如果想有选择的对变量进行发送,可用http://10.72.25.203/flashy/FlashService.aspx?变量名1=变量1值&变量名2=变量2值 这种方式来发送。
Flash端接收服务端返回数据的代码:
_root.onData = function()
{
_root.createTextField("textV",3,this._xmouse-50,this._ymouse-50,100,35);
textV.border = true;
textV.borderColor = 0x33BDCC;
textV.background = true;
textV.backgroundColor = 0x33BDCC;
textV._alpha = 40;
textV.multiline = true;
textV.wordWrap = true;
textV.text = you;
};
用根影片剪辑的onData事件接收,并将接收到的数据(存储在变量you中)用文本域的形式显示。
Flash按钮事件和发送变量的定义代码:
var zhan_name:String;
play1_btn.onRollOver = function(){
zhan_name = "合作";
ShowInfo();
}
play2_btn.onRollOver = function(){
zhan_name = "百口泉";
ShowInfo();
}
play3_btn.onRollOver = function(){
zhan_name = "重油";
ShowInfo();
}
注意代码写完后在发布设置中将本地回放安全性设为:只访问网络(后面的例子全部做相同的设置)。
服务端接收代码:
Request.Form["zhan_name"];
注意如果用URL?Par1=Value1&Par2=Value2这种方式发送请求,接收代码应写为:
Request.QueryString["zhan_name "];
服务端返回给flash数据的代码:
Response.Write("you=返回的数据数据");
服务端完整代码:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OracleClient;
public partial class _Default : System.Web.UI.Page
{
OracleConnection OraCnn;
OracleCommand OC;
OracleDataAdapter OA;
protected void Page_Load(object sender, EventArgs e)
{
OraCnn = new OracleConnection(GetDataInfo());
}
private string GetDataInfo()
{
OracleConnectionStringBuilder OS = new OracleConnectionStringBuilder();
OS.UserID = "sdptest";
OS.Password = "sdptest";
OS.DataSource = "ORA116";
return OS.ConnectionString;
}
public void GetDataFromtoreProcedure()
{
Response.Write("you=");
OraCnn.Open();
OC = new OracleCommand("oilstore.oilstore", OraCnn);
OC.CommandType = CommandType.StoredProcedure;
OracleParameter OracleP1 = new OracleParameter("ZName", OracleType.VarChar, 10);
OracleP1.Direction = ParameterDirection.Input;
OracleP1.Value = Request.Form["zhan_name"];
OracleParameter OracleP2 = new OracleParameter("C", OracleType.Cursor);
OracleP2.Direction = ParameterDirection.Output;
OC.Parameters.Add(OracleP1);
OC.Parameters.Add(OracleP2);
OA = new OracleDataAdapter(OC);
DataTable DT = new DataTable();
OA.Fill(DT);
OraCnn.Close();
if (DT.Rows.Count > 0)
{
string curyou = string.Empty;
for (int i = 0; i < DT.Rows.Count; i++)
{
for (int j = 0; j < DT.Columns.Count; j++)
{
curyou += DT.Rows[i][j] + " ";
}
}
Response.Write(curyou);
}
else
{
Response.Write("无数据!");
}
}
}
服务端接收到变量zhan_name后,通过Oracle存储过程取数据,然后返回,注意返回形式:Response.Write("you="),将返回的结果集赋给了变量you,flash端可以接收到you的值,注意这种方式一次只能够返回一个变量,如果这样写:Response.Write("you=132,qi=234"),这样flash是读不出qi的,读出you的值是:132,qi=234。
Flash+PHP+mySQL
Flash的部分与ASP的部分一样, 只是把当中的后台文件名更改一下
function loadData() {
loader = new LoadVars();
loader.load("server.php?time="+new Date().getTime()); //向ASP取得资料的连接, 这里我不使用Math.random是因为这样有个缺点
loader.onLoad = function(success) {
if (success) {
display.htmlText = loader.Result; //loader.Result是ASP传递回来的资料
} };
} submit.onRelease = function() { //当按钮按下放开的时候
if (name.text.length == 0) { //这里是判断输入框是否为空
Selection.setFocus(name); //把光标设定在指定的输入框
} else if (msg.text.length == 0) { //同上
Selection.setFocus(msg);
} else {
status.text = ""; //这个动态文本你们可以自己设定
sender = new LoadVars();
sender.onLoad = function(success) {
if (success) {
if (sender.Result == "Success" ) { //传递回来的讯息为Success时
status.text = "记录成功...";
name.text = msg.text=""; //清空输入栏位
loadData(); //重新刷新资料
} else {
status.text = "记录失败, 请再次尝试...";
} delete sender; //养成习惯把LoadVars变量删除以释放内存空间
} };
sender.load("server.php?action=save&name="+name.text+"&msg="+msg.text, sender, "POST" );//和sendAndLoad的功用一样, 传送出变量并等待资料传回, 传回的资料会在onLoad中截取
} };
loadData(); //在一开始载入资料库中的资料
PHP部分 :
<?php
$DBhost = "localhost"; // 服务器的DNS名
$DBuser = "root"; // 用户名
$DBpass = ""; // 用户密码
$DBName = "super-tomato"; //资料库名字
$table = "guestbook"; // 资料库中资料表的名字
$DBConn = mysql_connect($DBhost,$DBuser,$DBpass) or die("無法連接資料庫 : " . mysql_error()); //开始连接mysql
mysql_select_db($DBName, $DBConn) or die("無法連接資料庫: " . mysql_error()); //选择mysql資料库并连接
if($action == "save" ) { //当Flash的action变量为save时
$sql = "INSERT INTO ".$table."(Name, Message) VALUES ('".$name."', '".$msg."')"; // 把资料写入资料表内
$insert = mysql_query($sql, $DBConn) or die("無法連接資料庫: " . mysql_error());
if($insert) { //资料写入成功
echo "&Result=Success";
} else {
echo "&Result=Fail";
} } else {
$sql = "SELECT * FROM ".$table; //取得资料表中所有的资料
$query = mysql_query($sql, $DBConn) or die("無法選取資料 : " . mysql_error());
while ($array = mysql_fetch_array($query)) { //循环取得每一笔资料
$strName = mysql_result($query, $i, "Name" );
$strMsg = mysql_result($query, $i, "Message" );
$record .= $strName." : ".$strMsg."<br>"; //把资料储存在变量当中
$i++;
} echo "&Result=".$record."<br><b>Finish</b>"; //传递变量中的资料到Flash
}
mysql_close(); //结束资料库连接
?>
******** PHP 连接 Microsoft Access 的方法 **********
<?
$db = "./Database.mdb";
$conn = new COM("ADODB.Connection" ); //在PHP使用COM来连接
// 两种方法都可以连接选一种即可
$conn->Open("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=$db" );
//$conn- > Open("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$db" );
$sql = "SELECT * FROM guestbook";
$rs = $conn- > Execute($sql);
?>
This blogger is recording some code samples,technical skill of java,.Net,javascript, css, html for myself use. All articles are coming from my own experience and my collections which are from internet world. If you find any material have copy right issue please leave a comment to me. I will delete it immediately. These articles are writing in English or Chinese. Hope these information can help other technical guys. Thanks for reading.
Subscribe to:
Post Comments (Atom)
-
If you get "This page calls for XML namespace http://richfaces.org/a4j declared with prefix a4j but no taglibrary exists for that names...
-
Method 1: import oracle.sql.*; public class JClob { String tableName = null; // String primaryKey = null; // String primaryValue = null; // ...
-
1.HTTP-binding(ServiceMix) 1.4 各组件间传递消息流的过程如下: 1. HttpClient : Http 客户端运行一个独立的 Java 客户端程序,通过其中的 URLConnection 类连接到 http://...
No comments:
Post a Comment