Php AS3&;MySQL-将输出的字符串添加到变量
我很确定我的问题有一个非常简单的解决方法,但无论如何我会尽可能详细地解释 基本上,我使用PHP和MySQL,使用GETs将信息发送到我的flash文件 通过使用FlashVars,我成功地获得了用户id,我可以将我的问题/搜索发送到一个PHP脚本,该脚本访问数据库并将信息返回到html页面 我现在想做的是将发送回html页面的信息添加到flash中的变量中,例如:Php AS3&;MySQL-将输出的字符串添加到变量,php,mysql,actionscript-3,flash,Php,Mysql,Actionscript 3,Flash,我很确定我的问题有一个非常简单的解决方法,但无论如何我会尽可能详细地解释 基本上,我使用PHP和MySQL,使用GETs将信息发送到我的flash文件 通过使用FlashVars,我成功地获得了用户id,我可以将我的问题/搜索发送到一个PHP脚本,该脚本访问数据库并将信息返回到html页面 我现在想做的是将发送回html页面的信息添加到flash中的变量中,例如: var usr_name = get_user_name(id) || 'Unknown'; // "Unknown" should
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);
}
这一切似乎都很好,只是当我试图去掉or语句(| |“未知”)时,我得到了以下错误:
TypeError: Error #2007: Parameter text must be non-null.
at flash.text::TextField/set text()
at App/frame1()
如果我只是在web浏览器中键入URL,就会输出名称
我不知道为什么这是一个这样的问题
谢谢
伊莱
如果您期望上述函数将响应字符串返回到变量中,那么您就错了
您必须让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请求的“异步”性质 当您执行
\u 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();
我注意到你的代码不是强类型的。i、 e.不为变量分配数据类型。这可能会导致问题,并降低可读性
此外,您最好删除所有添加的事件侦听器(使用
removeEventListener
),以便对加载程序进行垃圾收集。这样做是可行的,但由于加载和输出之间存在延迟,它会捕获未知的事件,然后一旦加载,就会将其更改为名称,但已经很晚了。。显然,这种情况会发生。您正在通过网络发出请求。不必太晚。在回复返回之前,请确保没有其他内容启动。复制答案不是我们应该遵循的,所以。。。只是我的想法。啊,但我没有重复你的答案。代码显然是相同的,但您刚刚用勺子舀了OP,我已经解释了它为什么会这样工作。总之,这不叫复制,所以你的论点是无效的……只是我的想法。
var usr_name = "";
get_user_name();