AS3 + HTTP GET不起作用

时间:2014-12-19 19:28:07

标签: web-services actionscript-3 flash

我在Flash中有一个项目,我使用带有一些数据的网络服务器。我用以下内容阅读了该信息(json):

var url:String = "URL REQUEST";
var request:URLRequest = new URLRequest(url);
var loader:URLLoader = new URLLoader();
loader.load(request);

我在TextField中使用该信息。这很好,并正确显示我的数据。但是,当我发布我的作品或打开文件时.swf没有显示数据。

Adob​​e Flash内部工作正常。 外面没有工作。

我有一个带有nodeJS运行服务的覆盆子pi。门在路由器上打开了。

我的nodeJS

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));
const port = process.env.PORT || 3001;
const SERVER_ROOT = "http://localhost:" + port;
var messages =  {};
messages["a1"] = blablabla;
--
messages["n"] = blablabla;
function buildMessage(newID, text, user){
const now = new Date();
return {

    };
};
app.route("/message") 
.get(function(req, res) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");

    res.json(messages);
});
app.param('messageID', function(req, res, next, messageID){
req.messageID = messageID;
return next();
})
app.listen(port, function() {
console.log("Listening on " + port);
});

2 个答案:

答案 0 :(得分:0)

您很可能收到安全错误。您可以采取以下步骤:

  1. 确保为您的加载器添加适当的侦听器,以便正确处理错误。

    loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandlerFunction);
    loader.addEventListener(IOErrorEvent.NETWORK_ERROR, ioErrorHandlerFunction);
    loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandlerFunction);
    
  2. 确保使用正确的安全沙箱设置进行发布。

    转到您的发布设置文件 - >发布设置。

    您会看到标有本地播放安全性的下拉列表。确保将其设置为仅限访问网络,而不是默认仅访问本地

  3. 如果您处理错误,您至少会知道问题所在。如果这不能解决您的问题,请添加一个全局错误处理程序并共享抛出的内容(如果有的话)。

    您可以在主时间轴或文档类中执行以下操作:

    loaderInfo.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.UNCAUGHT_ERROR, uncaughtErrorHandler);
    
    function uncaughtErrorHandler(event:UncaughtErrorEvent):void {
        if (event.error is Error) {
            var error:Error = event.error as Error;
            trace(error);
        }
        else if (event.error is ErrorEvent){
            var errorEvent:ErrorEvent = event.error as ErrorEvent;
            trace(errorEvent);
        }
    }
    

    修改

    通过阅读您的更新,看起来您可以通过在浏览器中从Pi Node JS Server中输出您的swf来轻松解决此问题。 (使用html发布然后复制到服务器,然后在Web浏览器中访问它。)

答案 1 :(得分:0)

这是一个典型的安全错误,当swf尝试加载除其自己以外的其他域中的内容并且没有授权执行此操作时会触发该错误。因此,要避免此类安全性错误,必须在要从中加载数据的服务器根目录中创建crossdomain.xml文件。要更加了解事物,请查看此架构(从Adobe Cross Domain Policy File获取并编辑):

enter image description here 因此,在这种情况下,要允许a.com中的swf文件从b.com加载数据,我们必须在crossdomain.xml的根目录中添加b.com文件,以便我们可以使用b.com/crossdomain.com访问它。有关此文件的内容及其更多详细信息,您可以看到跨域规范的上述链接。它可以是这样的:

<?xml version="1.0"?>
<cross-domain-policy>
    <!-- if used alone, allow only all a.com requests but not its sub-domains -->
    <allow-access-from domain="a.com"/>
    <!-- if used alone, allow all a.com sub-domains and a.com requests -->
    <allow-access-from domain="*.a.com"/>
    <!-- if used alone, allow only b.a.com sub-domain requests -->
    <allow-access-from domain="b.a.com"/>
</cross-domain-policy>

我希望这一切可以帮助您解决问题。