AS3&MySQL - 将输出的字符串添加到变量
我很确定对我的问题有一个非常简单的修复方法,但我会尽可能详细地解释。AS3&MySQL - 将输出的字符串添加到变量
基本上我使用PHP与MySQL使用GETs将信息发送到我的Flash文件。
使用FlashVars我已经设法得到用户的id',我可以将我的问题/搜索发送到访问数据库并将信息返回到html页面的PHP脚本。
我想什么,现在做的就是添加发送回html页面的变量中闪光的信息。例如:
var usr_name = get_user_name(id) || 'Unknown'; // "Unknown" should just be for offline use.
但这只是返回“未知”
这是使用的功能:
public function get_user_name(usr_id){
loadData('search.php',"quest=name",'usr_id='+usr_id);
}
private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void {
var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000));
var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ;
trace(create_URL);
_loader = new URLLoader();
_request = new URLRequest(create_URL);
_request.method = URLRequestMethod.POST;
_loader.addEventListener(Event.COMPLETE, onLoadData);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad);
_loader.load(_request);
}
public function onLoadData(e:Event):String {
return(e.target.data);
}
这一切似乎都工作正常,它只是当我尝试做出来的或声明(||“未知”)我得到这个错误:
TypeError: Error #2007: Parameter text must be non-null.
at flash.text::TextField/set text()
at App/frame1()
如果我只是在网页浏览器中输入网址,我会得到名字。
我不知道为什么这是一个这样的问题。
感谢 礼
public function onLoadData(e:Event):String {
return(e.target.data);
}
如果你希望上面的函数来响应字符串返回到变量,那么你就错了。您必须让onLoadData
填充变量本身。试试这个方法:
var usr_name = 'Unknown';
get_user_name(id);
function get_user_name(usr_id) {
loadData('search.php',"quest=name",'usr_id='+usr_id);
}
function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void {
var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000));
var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3);
trace(create_URL);
_loader = new URLLoader();
_request = new URLRequest(create_URL);
_request.method = URLRequestMethod.POST;
_loader.addEventListener(Event.COMPLETE, onLoadData);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad);
_loader.load(_request);
}
function onLoadData(e:Event) {
usr_name = e.target.data;
}
确定,从你的代码粗略地看一眼,很明显你不知道在AS3 URL请求的“异步”的性质。
当你做_loader.load()
,Flash实际上打开这个管道在不同线程,可以这么说。这可确保在加载URL请求时应用程序不会冻结。
所有你需要这样是这样的:
public function get_user_name(usr_id){
loadData('search.php',"quest=name",'usr_id='+usr_id);
}
private function loadData(page_Name='search.php',get1='g1=1',get2='g2=2',get3='g3=3'):void {
var randomParam:String = "?p=" + Math.floor(Math.random() * (10000000));
var create_URL = (URL + page_Name + randomParam + '&'+ get1 + '&' + get2 + '&' + get3) ;
trace(create_URL);
_loader = new URLLoader();
_request = new URLRequest(create_URL);
_request.method = URLRequestMethod.POST;
_loader.addEventListener(Event.COMPLETE, onLoadData);
_loader.addEventListener(IOErrorEvent.IO_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.NETWORK_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.VERIFY_ERROR, onDataFiledToLoad);
_loader.addEventListener(IOErrorEvent.DISK_ERROR, onDataFiledToLoad);
_loader.load(_request);
}
public function onLoadData(e:Event):String {
usr_name = e.target.data || 'Unknown';
}
你这样称呼它
var usr_name = "";
get_user_name();
我注意到你的代码是不是强类型。即您不要将数据类型分配给您的变量。这可能会导致问题并降低可读性。
此外,您最好删除所有添加的事件侦听器(使用removeEventListener
),以便加载器被垃圾收集。
复制答案不是我们应该遵循的东西......只是我的想法。 – loxxy 2012-04-16 18:40:24
啊,但我没有重复你的答案。代码将__OBVIOUSLY__是一样的,但你刚刚舀过OP,并且我已经解释了它为什么按照它的方式工作。总而言之,这不是所谓的重复,所以你的论点是无效的......只是我的想法。 – 2012-04-17 07:25:28
因此,这样的工作,但由于加载和输出之间有一个延迟抓住未知然后一旦加载改变它的名称,但它已经到了晚期.. – 2012-04-16 17:47:31
明显会发生。您正在通过网络发出请求。它不必太晚。只要确保没有其他事情开始,直到返回响应。 – loxxy 2012-04-16 18:37:55