Javascript 不将数据返回到 AS3 flash

标签 javascript actionscript-3 flash externalinterface

我希望有人能帮助我。我在 FlashBuilder 4 中使用 AS3 有以下功能:

protected function doIt():void
    {
        if (ExternalInterface.available) {
            var retData:String;
            retData = ExternalInterface.call("returndata");
            if(retData != null) {
                eidLbl.text = retData.toString();
            } else {
                eidLbl.text = "Returned Null";
            }
        } else {
            eidLbl.text = "External Interface not available";
        }                
    }

以及它调用的以下 javascript 函数:

var fql_query = "some query format";
function returndata(){
    return fql_query;
}

当我从我的网站运行这些时,一切正常! Flash 文件调用 JavaScript 函数并将“某种查询格式”返回到正确的文本字段中。

但是,如果我将闪光灯功能更改为如下:

protected function doIt():void
{
    if (ExternalInterface.available) {
        var retData:String;
        retData = ExternalInterface.call("runFQL",uidLbl.text);
        if(retData != null) {
            eidLbl.text = retData.toString();
        } else {
            eidLbl.text = "Returned Null";
        }
    } else {
        eidLbl.text = "External Interface not available";
    }                
}

以及以下 JavaScript 函数:

function runFQL(id){
    var user_id = id;
    var page_id = "**********"; // the page id that is actually there is valid
    var fql_query = "SELECT uid FROM page_fan WHERE page_id="+page_id+" and uid="+user_id;

    FB.api({
        method: 'fql.query',
        query: fql_query
    },
    function(response){
        if (response[0]) {
                var uid = response[0].uid;
                window.alert(uid); //100001632043058
                return uid;
        } else {
                window.alert("return 1000");
        }
    });    
};

我的问题是,当我运行这个时,它会传入 id,运行查询,并准确地拉回 uid 并将其显示在警报中,但是(这是我的问题)它不会将其传回在返回时闪烁。每次它都返回为 null 或未定义。

谁能告诉我我错过了什么。我已经在谷歌上搜索了好几个小时了。

最佳答案

function(response){
    if (response[0]) {
        var uid = response[0].uid;
        window.alert(uid); //100001632043058
        return uid;
    } else {
        window.alert("return 1000");
    }
});

在 FB.api 函数完成时调用,而不是在调用 runFQL 时调用。因此 runFQL 会运行一遍并每次都返回 undefined。

您可以做的是,一旦 FB.api 调用完成,就调用 Flash 应用程序内的函数并将返回值传递到那里。所以基本上在 flash 中执行一个ExternalInterface.addCallback并从javascript调用该函数。

function runFQL(id){
    var user_id = id;
    var page_id = "**********"; // the page id that is actually there is valid
    var fql_query = "SELECT uid FROM page_fan WHERE page_id="+page_id+" and uid="+user_id;

    FB.api({
        method: 'fql.query',
        query: fql_query
    },
    function(response){
        if (response[0]) {
                var uid = response[0].uid;
                window.alert(uid); //100001632043058
                // needs ExternalInterface.addCallback("sendDataBack",handleData); in your 
                // as3 code
                yourSwf.sendDataBack(uid); 
        } else {
                window.alert("return 1000");
        }
    });    
};

关于Javascript 不将数据返回到 AS3 flash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514491/

相关文章:

actionscript-3 - 如何跨关键帧访问变量 - AS3

apache-flex - 如何在运行时获取控件的类型?

jquery - 网络摄像头/麦克风检测

javascript - FileReader.js 在 IE9 中没有任何反应

Flash 到 Html5 Canvas : slow vector graphics

javascript - 未捕获的类型错误 : Cannot read property 'msie' of undefined - jQuery tools

javascript - 使用对象字面量创建新对象

javascript - 为什么功能组件中没有声明更新

javascript - 选择框在转换后在 Firefox 中移动 :scale()

actionscript-3 - Flex 条件编译错误