Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在netconnection上使用单例模式多次调用amfphp_Php_Actionscript 3_Singleton_Request_Amfphp - Fatal编程技术网

在netconnection上使用单例模式多次调用amfphp

在netconnection上使用单例模式多次调用amfphp,php,actionscript-3,singleton,request,amfphp,Php,Actionscript 3,Singleton,Request,Amfphp,我尝试在一个ActionScript方法上调用AMFPHP两次,结果只有第一次调用成功。第二个不会返回错误,不会发出任何警报,更可能的是它甚至不会发生,我不知道为什么 以下是一个例子: public function editSomething():void{ if(dgChild.selectedIndex == -1){ Alert.show("You need to select a register in order to edit it."); re

我尝试在一个ActionScript方法上调用AMFPHP两次,结果只有第一次调用成功。第二个不会返回错误,不会发出任何警报,更可能的是它甚至不会发生,我不知道为什么

以下是一个例子:

public function editSomething():void{
    if(dgChild.selectedIndex == -1){
       Alert.show("You need to select a register in order to edit it.");
       return;
    }
    _parent1.getParentByChild(dgChild.selectedItem.id);
    _parent2.getParent2ByChild(dgChild.selectedItem.id);
}
当调用此方法时,第一个父对象被正常调用,而第二个父对象则不被正常调用

变量_parent1和_parent2是与PHP通信并保存结果的对象:

public class parentDAO{
    //Service or Class that this objectDAO will be communicating with. 
    private const _phpController:String = "parentController/";
    private var _AMFPHP:AMFPHP = AMFPHP.getInstance();

    //ArrayCollection that will be filled with data comming from PHP/Database.        
    [Bindable] private var _dataProviderAeronave:ArrayCollection;
    //I use public getter and setter for this dataProvider

    public function getParentByChild(child_id:int):void{
          _AMFPHP.GATEWAY.call(_phpController + "getParentByChild", new Responder(resultGetParent), child_id);
    }

    private function resultGetParent(result:Array):void{
            dataProviderParent = new ArrayCollection(result); 
    }
}
现在,假设变量_parent1是上面声明的一个对象,_parent2是另一个类的另一个对象,非常类似于这个对象,并且假设这两个通信都工作得非常好,现在出现了问题:当我在一个ActionScript方法中调用这两个对象时。如果我只调用其中一个,它将正常工作,但当我调用两个服务时,第二个服务实际上从未调用过。我对此很确定,因为我可以通过服务捕获代理看到它


有什么想法吗?

每次NetConnection类调用AMFPHP时,它都会自动关闭与路径的连接。所以,基本上下一个调用被忽略,我不知道为什么它没有显示在Flash调试器中。
我的解决方案是始终检查网关是否通过NetConnection类中的connected[read-only]属性连接。如果为false,我将强制建立一个新连接,瞧,脚本工作得非常好。

知道如何修复这个类吗?我和你们有或多或少相同的问题,amfphp在尝试交流时已经很忙了,但我正在广泛使用这个类。 基本上,它所做的是调用ChannelPicker.getInstance.getNewRemoteObject

package communication
{
    import flash.net.NetConnection;

    import mx.core.FlexGlobals;
    import mx.managers.BrowserManager;
    import mx.managers.IBrowserManager;
    import mx.messaging.ChannelSet;
    import mx.messaging.channels.AMFChannel;
    import mx.rpc.remoting.RemoteObject;

    import spark.components.Label;

    public class ChannelPicker
    {
        private static  var instance:ChannelPicker;
        protected var channelSet:ChannelSet= new ChannelSet();
        protected var url:String;

        static public function getInstance():ChannelPicker{
            if(instance == null){
                instance = new ChannelPicker();
            }
            return instance;
        }

        public function ChannelPicker()
        {
            do
            {
                var browser:IBrowserManager = BrowserManager.getInstance();
                browser.init("","");
                url = browser.url;
            }while (url == null || url=="");
                        /*oracle_plajva is project name which ends up being html name of my file so to get current url i need to split it */
            url = url.split(/oracle_plajva.html/)[0] + "Amfphp/index.php";
            var chanel:AMFChannel = new AMFChannel("amfphp", url);
            this.channelSet = new ChannelSet();
            this.channelSet.addChannel(chanel);
        }

        public function getChannelSet():ChannelSet{
            return channelSet;
        }

        public function getNewRemoteObject():RemoteObject{
            var o:RemoteObject = new RemoteObject();
            o.destination = "amfphp";
            o.channelSet = channelSet;
            return o;
        }

        public function getUrl():String{
            return url;
        }
    }
}

_parent1和_parent2是不同于amfphp的服务。不同的类、不同的表等等。我不确定RemoteObject是如何工作的,也没有使用过它的经验,但每次调用此getNewremoteObject时,似乎都在分解新对象以连接AMFPHP。我的Singleton类的目的是缩小我在应用程序中构建的NetConnection对象的数量。你似乎只是想集中你与AMFPHP的连接位置,对吗?是的,没错。我可以刷新我的应用程序,只要它是单个实例,但如果我有两个flash player实例,并且我正在运行并同时调用AMFPHP服务,就会发生一些奇怪的事情,我不知道如何调试它。即使我使用两份相同的app和amfphp,也会发生同样的情况。所以我认为在flash浏览器端或amfphp端都有一些wierd缓存。不管怎样,这里是发生了什么,正如您在pic中看到的,出现了一些问题,使用RemoteObject有什么特别的原因吗?我可以在网络连接方面为您提供更多帮助。关于屏幕截图,我认为Row_number列来自使用Row_number魔术变量的select from Oracle。我对Oracle没有太多经验,但我确实记得这是为结果分页所必需的。您是否从Flex或Apache Log PHP收到任何错误消息?在图片中,我注意到这是两个不同的表。为什么要标记行号列?因为它应该被命名,因为标题文本不起作用,我的意思是,如果我用monster debugger检查它,两个实例都将其设置为正确,但它不是。我还尝试使用charles sniffer检查我的流量,amfphp在两次运行中运行相同的数据,所以我猜客户端一定出了问题,换句话说,是wierd flash player的一些bug。