如果数据发生更改,如何使用套接字轮询xml数据(AS3)
我陷入了困境,非常感谢您的帮助,因为这已经超出了我对as3的舒适区。基本上,我在我工作的各个办公室的屏幕上都有一个销售演示。这些数据显示了每天的销售数据,当有人进行销售时,这些数据可能会发生变化。我有一个swf将XML文件中的数据加载到幻灯片中,除了XML文件在需要强制刷新(手动)时发生更改外,其他一切都很好。我希望这样,如果文件更改,它会自动反映在swf中。到目前为止,我的研究已经将我指向了AS3套接字通信,但我还没有成功地找到相关的教程。我的代码如下,如果有人能直接给我指出正确的方向,我将不胜感激如果数据发生更改,如何使用套接字轮询xml数据(AS3),xml,actionscript-3,Xml,Actionscript 3,我陷入了困境,非常感谢您的帮助,因为这已经超出了我对as3的舒适区。基本上,我在我工作的各个办公室的屏幕上都有一个销售演示。这些数据显示了每天的销售数据,当有人进行销售时,这些数据可能会发生变化。我有一个swf将XML文件中的数据加载到幻灯片中,除了XML文件在需要强制刷新(手动)时发生更改外,其他一切都很好。我希望这样,如果文件更改,它会自动反映在swf中。到目前为止,我的研究已经将我指向了AS3套接字通信,但我还没有成功地找到相关的教程。我的代码如下,如果有人能直接给我指出正确的方向,我将不
//
//XML LOADING
//
var xmlfile:String;
var xmlf:String = stage.loaderInfo.parameters.xmlfile;
if(xmlf!=null){
xmlfile = xmlf;
}else{
xmlfile = "file path";
}
var xmlLoader:URLLoader = new URLLoader();
xmlLoader.addEventListener(IOErrorEvent.IO_ERROR, function(evt:IOErrorEvent):void {},false,0,true);
xmlLoader.addEventListener(Event.COMPLETE, xmlLoadingDone);
xmlLoader.load(new URLRequest(xmlfile));
////////////////////////////////////////////////////////////////////////////////////////////
//
//socket connection text
//
var xmlSocket:XMLSocket = new XMLSocket();
var hostName:String = "hostname";
var connectionOpen:Boolean = false;
xmlSocket.addEventListener(Event.CONNECT, onSocketConnection, false, 0, true);
xmlSocket.addEventListener(DataEvent.DATA, onSocketResponse, false, 0, true);
xmlSocket.addEventListener(Event.CLOSE, onSocketClose, false, 0, true);
xmlSocket.addEventListener(IOErrorEvent.IO_ERROR, onIOError, false, 0, true);
function onSocketConnection(evt:Event):void {
//option to go here
connectionOpen = true;
trace("connection open");
}
function onSocketResponse(evt:DataEvent):void {
//option to go here
}
function onIOError(evt:IOErrorEvent):void {
//option to go here for error
}
function onSocketClose(evt:DataEvent):void {
//option to go here
xmlSocket.close();
connectionOpen = false;
}
///////////////////////////////////////////////////////////////////////////////////////////
//
//XML DATA PARSING AND IMAGE LOADING STARTER
//
function xmlLoadingDone(e:Event):void {
xmlLoader.removeEventListener(Event.COMPLETE, xmlLoadingDone);
var XMLdata:XML = new XML(e.currentTarget.data);
}
您将需要一个轮询循环,基本上设置一个
计时器
,并让经过的计时器处理程序重新加载XML
使循环间隔尽可能长或短
更新:
此代码示例可以添加到现有代码中
// Add these imports at the top...
import flash.utils.Timer;
import flash.events.TimerEvent;
// Then insert this code...
var delay:int = 30000; // 30 seconds. (as milliseconds)
var repeat:int = 0; // continue until the Timer is stopped.
var pollingLoop:Timer = new Timer(delay, repeat);
pollingLoop.addEventListener(TimerEvent.TIMER, timerHandler);
pollingLoop.start(); // begin polling.
function timerHandler(e:TimerEvent):void{
// We do the xmlLoading in the timer handler...
xmlLoader.load(new URLRequest(xmlfile));
// So remove the other copy of this ^ line from your code.
}
// The xmlLoader handler now looks after the rest.
这应该可以满足您的需要。您好,感谢您的快速响应,如果您不介意的话,我们将非常感谢您提供一个代码示例,这样做是有意义的,但我不确定从哪里开始,我的代码是否正确?是的,您只需每隔几秒钟重复一次XML加载,您就可以以任何其他方式检测更改。我将在我的答案中添加一个示例。非常感谢,我现在正在进行实现和测试-我会让您知道我的进展,再次感谢!!这是一个巨大的帮助,目前swf正在刷新,但在第4/5圈后崩溃,我正在调整计时器的频率,它应该会自行解决。再次感谢您的帮助。非常欢迎您,但飞机坠毁令人担忧。您可以尝试在计时器循环处理程序中重置
xmloader
,另外,我应该提到您也不再需要XMLSocket
代码。