0

我很确定我的问题有一个非常简单的解决方法,但无论如何我会尽可能详细地解释。

基本上我使用 PHP 和 MySQL 使用 GET 将信息发送到我的 flash 文件。

使用 FlashVars,我设法获得了用户的“id”,我可以将我的问题/搜索发送到访问数据库并将信息返回到 html 页面的 PHP 脚本。

我现在想做的是将发送回 html 页面的信息添加到 flash 内的变量中,例如:

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 语句(|| 'Unknown')时,我收到此错误:

TypeError: Error #2007: Parameter text must be non-null.
    at flash.text::TextField/set text()
    at App/frame1()

如果我只是在网络浏览器中输入 URL,我会得到输出的名称。

我不确定为什么会出现这样的问题。

谢谢伊莱

4

2 回答 2

0
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;
}
于 2012-04-16T17:12:35.523 回答
0

好的,粗略地看一下您的代码,很明显您不知道 AS3 中 URL 请求的“异步”性质。

当您这样做时,Flash 实际上会在不同的线程_loader.load()上打开此管道,可以这么说。这可确保加载 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),以便对加载程序进行垃圾收集。

于 2012-04-16T17:54:40.570 回答