1

そのため、AS2.0を使用してSWFに取り組んでいます。XMLファイルから為替レートにアクセスする必要があります。XML子ノードを反復処理するsetIntervalがすでにあります。だから私はすでに私のコードでタイマーを実行しています。XMLをリロードするには、別のタイマーを設定して、XMLへの変更が20秒ごとに常に更新されるようにする必要があります。それをやろうとすると、タイマーが重なってしまいます。助けてくれませんか?ありがとう

これが私の現在のコードです:

    var index:Number = 0;
    var myxml:XML = new XML();
    myxml.ignoreWhite = true;
    myxml.onLoad = function(success:Boolean):Void{
loadData();
setInterval(loadData, 3000);
};


function loadData(){
var messages:XMLNode = myxml.firstChild;
if(index >= messages.childNodes.length)
    index = 0;
var my_message:XMLNode = messages.childNodes[index];

_root.status_1.htmlText = my_message.childNodes[0].firstChild.nodeValue; 
_root.status_2.htmlText = my_message.childNodes[1].firstChild.nodeValue; 
_root.status_3.htmlText = my_message.childNodes[2].firstChild.nodeValue; 
_root.status_4.htmlText = my_message.childNodes[3].firstChild.nodeValue;
_root.status_5.htmlText = my_message.childNodes[4].firstChild.nodeValue;
_root.status_6.htmlText = my_message.childNodes[5].firstChild.nodeValue;        

index++;

       }
myxml.load("data.xml");

私のXMLファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
   <messages>
 <message>
            <item>1.38329</item>
    <item>1.58344</item>
    <item>1.06960</item>
    <item>93.7300</item>
    <item>0.9864</item>
    <item></item>
</message>


<message >
    <item>1.36789</item>
    <item>1.56734</item>
    <item>1.03752</item>
    <item>93.7267</item>
    <item>0.97836</item>
    <item></item>
</message>

<message >
    <item>1.38126</item>
    <item>1.59104</item>
    <item>1.05380</item>
    <item>93.5755</item>
    <item>0.9923</item>
    <item></item>
</message>

<message >
    <item>1.38126</item>
    <item>1.29789</item>
    <item>1.5423</item>
    <item>1.07123</item>
    <item>93.7268</item>
    <item>0.9867</item>
    <item></item>
</message>

<message >  
    <item>1.38329</item>
    <item>1.514762</item>
    <item>1.07451</item>
    <item>93.7277</item>
    <item>0.9975</item>
      <item></item> 
</message>

</messages>
4

1 に答える 1

0

次のコードをお勧めします:

var iCurrentNodeLoading:Number;
var intervalNextNode:Number;
var intervalReloadXML:Number;

var myxml:XML = new XML();
myxml.ignoreWhite = true;
myxml.onLoad = mx.utils.Delegate.create(this, onXMLLoadedEvent);

function onXMLLoadedEvent(success:Boolean):Void{
  if (success) {
    iCurrentNodeLoading = 0;
    loadNextNode();
  }
};


function loadNextNode() {
  if (intervalNextNode != undefined) clearInterval(intervalNextNode);
  var messages:XMLNode = myxml.firstChild;
  if (iCurrentNodeLoading >= messages.childNodes.length) iCurrentNodeLoading = 0;

  var my_message:XMLNode = messages.childNodes[iCurrentNodeLoading];

  _root.status_1.htmlText = my_message.childNodes[0].firstChild.nodeValue; 
  _root.status_2.htmlText = my_message.childNodes[1].firstChild.nodeValue; 
  _root.status_3.htmlText = my_message.childNodes[2].firstChild.nodeValue; 
  _root.status_4.htmlText = my_message.childNodes[3].firstChild.nodeValue;
  _root.status_5.htmlText = my_message.childNodes[4].firstChild.nodeValue;
  _root.status_6.htmlText = my_message.childNodes[5].firstChild.nodeValue;        

  iCurrentNodeLoading++;
  intervalNextNode = setInterval(loadNextNode, 3000);
}

function reloadXML(){
  if (intervalReloadXML != undefined) clearInterval(intervalReloadXML);
  myxml.load("data.xml");
  intervalNextNode = setInterval(reloadXML, 20000);
}

reloadXML();
于 2012-12-07T09:14:56.763 に答える