gpt4 book ai didi

php - 使用自定义类处理 AS3 中的数据库查询

转载 作者:行者123 更新时间:2023-11-29 03:32:32 27 4
gpt4 key购买 nike

我最近开始研究 AS3 中的自定义类(以磨练我的最佳实践编码习惯),并希望创建一个数据库类,允许用户首先实例化一个包含类中方法所需的所有信息的类添加、删除、修改(等)MySQL 表中的行(通过 PHP)。当然,这涉及使用 URLRequest、URLLoader 等。我的问题是,是否有人想出了一种方法,如何从专门包含该 var 数据的方法返回数据,而不依赖于本质上调度事件的方法(然后必须创建一个监听器,而不是将其内置到类中)。例如,

var myDB:dataBase = new dataBase("dbase","table","username","pword");

//this creates an instance of a database class with methods like:

trace(myDB.fetch(1)); //gets first row of table as a delimited string

if (myDB.delete(1)) {} 
//returns Boolean true if delete of row 1 was successful

我在下面找到了包含创建返回事件的类的方法的答案:

Combining URLRequest, URLLoader and Complete Event Listener In Actionscript 3.0?

但我希望该方法返回一个包含来自数据库的数据的字符串或一个 bool 确认,而不是派发一个事件监听器。这是我制作的类(class)的示例:

package com.customClasses {
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
import fl.events.DataChangeEvent;
import flash.events.Event

public class dataBase {
public var dbs:String = "";
public var usr:String = "";
public var pwd:String = "";
public var tab:String = "";
var returnData:String = "";

// Constructor
public function dataBase(dbs:String, usr:String, pwd:String, tab:String) {
this.dbs = dbs;
this.usr = usr;
this.pwd = pwd;
this.tab = tab;
}

public function fetch(idn:uint, par:String):String {
var returnData:String = "blank";
var vUrlReq:URLRequest = new URLRequest ("dBase.php");
var vUrlVars:URLVariables = new URLVariables();

function onLoadVarsComplete(event:Event): void {
//retrieve success variable from our PHP script:
if(event.target.data.msg == "success") {
var rawData:URLVariables = new URLVariables( event.target.data );
returnData = rawData.fromPHP;
} else {
returnData = "failed!";
}
}
vUrlReq.method = URLRequestMethod.POST;
vUrlVars.dir=dbs; // name of table affected
vUrlVars.alpha=usr; // username
vUrlVars.beta=pwd; // password
vUrlVars.dbase=tab; // name of table affected
vUrlVars.func="fetch"; // function for php script to use
vUrlVars.idnum=idn; //if >0 search for record with that id
vUrlReq.data = vUrlVars;
var vLoader:URLLoader = new URLLoader (vUrlReq);
vLoader.addEventListener("complete", onLoadVarsComplete);
vLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
vLoader.load(vUrlReq);

return (returnData);
}

returnData 返回“空白”...所以我意识到我的方法没有按预期工作。我还意识到 returnData 字符串存在一些范围问题,并且我正在使用嵌套函数(可能是禁忌)。否则,有什么想法吗?

最佳答案

要执行您想要的操作,您可以使用回调函数或 DataEvent听众,像这样:

数据库.as :

package  {

import flash.net.*;
import flash.events.*;

public class DB extends EventDispatcher {

public static const DATA_LOADED = 'data_loaded';

public function DB() {
}

public function getDataUsingDataEvent(file_path:String):void {

var url_loader:URLLoader = new URLLoader();
url_loader.addEventListener(
Event.COMPLETE,
function(e:Event):void
{
var event:DataEvent = new DataEvent(DATA_LOADED, true, false, url_loader.data);
dispatchEvent(event);
}
)
url_loader.load(new URLRequest(file_path));
}

public function getDataUsingCallback(file_path:String, callback:Function):void {

var url_loader:URLLoader = new URLLoader();
url_loader.addEventListener(
Event.COMPLETE,
function(e:Event):void
{
callback(url_loader.data);
}
)
url_loader.load(new URLRequest(file_path));
}

}

}

然后:

var db:DB = new DB();

db.addEventListener(
DB.DATA_LOADED,
function(event:DataEvent):void {
trace(event.data);
}
)
db.getDataUsingDataEvent('file_path');

db.getDataUsingCallback(
'file_path',
function(data:String):void {
trace(data);
}
)

希望对您有所帮助。

关于php - 使用自定义类处理 AS3 中的数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28532053/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com