更新:现在我已将 AMFConnection var 声明移到 Main 中的函数之外,并注释掉了一些 trace() 命令,现在它给出了新的错误:
Error #2044: Unhandled NetStatusEvent:. level=error, code=NetConnection.Call.BadVersion
at AMFConnection/init()[/Users/Jan/Downloads/amfphp1/AMFConnection.as:32]
at AMFConnection()[/Users/Jan/Downloads/amfphp1/AMFConnection.as:23]
at Main/testConnection()[/Users/Jan/Downloads/amfphp1/Main.as:14]
at Main()[/Users/Jan/Downloads/amfphp1/Main.as:10]
所有这些本质上都指向 AMFConnection 的 NetConnection 初始化:(_netConnection = new NetConnection();
其中 _netConnection 在类的开头声明)
我正在尝试连接到服务器上的 AMFPHP(使用 Flash AS3),当它到达 .connect() 阶段时,swf 会出现故障。为了使事情变得更容易(?)和更可重用(?),我将所有 NetConnection 机制放入一个单独的类 AMFConnection 中,我从 Main 文档类中调用它,如下所示(细节已更改):
public function testConnection(e:*=null):void {
var conn:AMFConnection = new AMFConnection();
conn.table = "some_table";
conn.selections = "*";
conn.conditionals = "WHERE something = 'something'";
conn.service = "QueryAMF";
conn.method = "makeQuery";
conn.displayText = txt;
conn.gogogo("http://www.someplace.com/Amfphp");
}
AMFConnection 实际上启动连接并使用函数 gogogo() 调用 AMFPHP 服务,而这里的 connect() NetConnection 函数将不起作用。这是 AMFConncection 类的主要部分
private var _netConnection:NetConnection;
private var _responder:Responder;
function AMFConnection()
{
init();
}
private function init(e:* = null)
{
_netConnection = new NetConnection();
_responder = new Responder(uponResult);
}
public function gogogo(url:String):void {
trace(url);
_netConnection.connect(url);
_netConnection.call(String(service+"/"+method), new Responder(onResult, null), table, selections, conditionals);
}
快速调试会话显示以下错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at AMFConnection/gogogo()[AMFConnection.as:44]
at Main/testConnection()[Main.as:20]
at Main()[Main.as:8]
其中:Main.as:20 = conn.gogogo(...)
和AMFConnection.as:44 = _netConnection.connect(url)
;
它也无法显示舞台,而是显示加载点。现在,最终我将把这个应用程序移动到与 AMFPHP 服务相同的服务器上,但即使我在那里使用相对 url 而不是绝对 URL 尝试它,它仍然会在 connect() 处崩溃。我尝试将发布设置从仅限本地更改为仅限网络,但无济于事。
有什么线索吗?知道本地连接到 AMFPHP 的更好方法吗?
提前干杯!JB
PS 帖子已更新,请参阅页面顶部。