FlashのonLoadでキャッシュサーバを越え最新ファイルを読み込む方法

このQ&Aのポイント
  • サーバのファイル更新にもかかわらず、FlashのonLoadで古いファイルが読み込まれる問題が発生しています。キャッシュサーバが影響している可能性があります。
  • キャッシュサーバを越えてサーバより常に最新ファイルを取得する方法を知りたいです。
  • XMLファイルを読み込むプログラムを作成していますが、キャッシュサーバの影響により古いファイルが読み込まれてしまいます。キャッシュサーバを回避する方法を教えてください。
回答を見る
  • ベストアンサー

FlashのonLoadでキャッシュサーバを越え最新ファイルを読み込むには

いつも皆様には助けていただき非常に感謝しております。 現在、FlashよりonLoadで、XMLファイルを読み込むプログラムを作成していますが、サーバのファイルを更新しても、古いファイルを読み込み困っています。 パソコンのキャッシュを消しても現象は改善しません。 原因として考えられるのは、キャッシュサーバが影響していると思われます。(キャッシュサーバの無いパソコンでは正常の為) 何とか、キャッシュサーバを越え、サーバより最新ファイルを常に取得するよう記述したいのですが、記述方法が判らず苦労しています。 どなたか、ご存知の方がおられましたらご指導お願いします。 ※参考までに、XML読み込み部分を記述いたします。 import mx.xpath.XPathAPI var myXML:XML = new XML(); myXML.onLoad = function() {  var nodeList:Array;  var XPathString:String = "/基本データ/型式/型式名/*";  nodeList = XPathAPI.selectNodeList(this.firstChild,XPathString);  //読み込んだデータの処理 }

  • Flash
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BlurFiltan
  • ベストアンサー率91% (1611/1754)
回答No.1

読み込んでしまった後の onLoad ではなく, 書かれていらっしゃらない部分,読み込むときの load の方をなんとかしないとならないでしょう。 こちらの#2の方の方法ではうまく行かないでしょうか↓。 「環境によって!?外部テキストを最初しか読み込めない」 OKWave http://okwave.jp/qa1423191.html ランダムでなくても,日付や時刻などの数でも良いですが。

OkMoguMogu
質問者

お礼

BlurFiltan様 早々のアドバイス有難うございます。スパッと解決いたしました。 同様の記述、もう少しよく探すよう今後、気をつけます。 (つい「onLoad」や「XML」ばかりで探し行き着きませんでした。) ちなみにload部を下記よう引数を付与するよう変更しました。 助かりました。 ***以下、修正した記述*** myXML.load("AGL.xml?dummy=" + Math.floor( Math.random() * 10000)); //XMLファイルを読み込み

関連するQ&A

  • onload時の変数の有効範囲について

    こんばんは。よろしくお願いいたします。 AS2,以下のスクリプトについて import mx.xpath.XPathAPI; abc=new Array(); myXML= new XML(); myXML.ignoreWhite = true; myXML.onLoad =function (){ var XPathString:String = "/data/abc/*"; //条件を満たすノードを配列に格納 abc = XPathAPI.selectNodeList(this.firstChild, XPathString); textarea1.text=abc[0]; //(1) } myXML.load("data.xml"); textarea2.text=abc[0]; //(2) 条件を満たすノードを配列abcに格納したいのですが、(1)のabcには対象の ノードが格納されるのに対して、(2)のabcには何も格納されていません。 (2)のabcでも対象のノードを格納するにはどのようにしたらよいのでしょうか?

    • ベストアンサー
    • Flash
  • flashでPHPファイル(実際は該当するxmlを呼ぶ)を読み込む方法について

    FLASH(AS2.0)でPHPファイル(実際は該当するxmlを呼ぶ)を読み込むようにするにはどのようにしたらいいのですか? 現状では、ローカルのxmlファイルを読み込むように、 下記のように書いてあります。 var objXML:XML = new XML(); objXML.ignoreWhite = true; objXML.onLoad = function(success:Boolean):Void { if(success) { loadXML(this); } } var menuArray:Array = new Array(); // function loadXML(objXML:XML):Void { var dataNode:XMLNode = objXML.firstChild; var menuNodes:Array = dataNode.childNodes; for(var i:Number = 1; i <= menuNodes.length; i++) { var menuNode:XMLNode = menuNodes[i-1].childNodes; var Name:String = menuNode[0].firstChild.nodeValue; menuArray[i] = { title:Name}; } myVars(menuArray); } objXML.load("sample.xml"); この状態から、外部<http://aaaa/sample.php>URLに アクセスして、PHPファイルを読み込むにはどのようにしたら よいのか全くわかりません。 objXML.load("sample.xml"); 上記の()の中に直接URLを挿入すると、 ローカルでは確認できるのですが、 ファイルをアップすると、まったく読み込めてはいません。 ActionScriptは全くわからないので、ご教授よろしくお願いいたします。

  • XMLから読み込んだデータを数値に変換する方法

    こんにちは。 XMLからデータを読み取ってそのpositionの値を元に 画像を動かそうとしています。 ただ、読み込んだ数値が文字と判断されていて、 numberで変換しても、数値にならずに、動かすことが できません。 申し訳ありませんが、お教え頂ければ幸いです。 よろしくお願いします。 -----script------------------------------------------- myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("data.xml"); v_positionxArray = new Array (); v_positionyArray = new Array (); myXML.onLoad = function (loaded) { if (loaded) { v_rootNode = myXML.firstChild; v_num = v_rootNode.childNodes.length; v_currentPhoto = v_rootNode.firstChild; v_currentNumber = 0; for (i=0; i < v_num; i++) { v_positionxArray.push (v_currentPhoto.childNodes[0].firstChild); v_positionyArray.push (v_currentPhoto.childNodes[1].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; } } else { trace ("error occured"); } }; btn_test.onRelease = function () { if (v_currentNumber < v_num-1) { v_currentNumber+=1; picture_x = Number(v_positionxArray[v_currentNumber]); picture_y = Number(v_positionyArray[v_currentNumber]); } }; picture.onEnterFrame = function () { this._x += picture_x; this._y += picture_y; } -----xml data-------------------------------------- <data> <member> <positionx>-591</positionx> <positiony>-130.7</positiony> </member> </data>

    • ベストアンサー
    • Flash
  • XMLを使わずに同様の事をしたいのですが…

    某掲示板に同様の質問をしたのですが、本当に困っておりどうにもならない状態です。どうぞ、御教授お願い致しますm(__)m 速習WEbテクニックFlashMX実例サンプル60にある内容からです。 ムービーの再生が始まると同時に、外部のJPG画像ファイルのURLが書き込まれているXMLファイルをロードし、XMLのデータをもとにJPGファイルの数を割り出し、その分だけ読み込み用のムービークリップを複製、表示するというものです。 ソースは次の通りです。これをXMLファイルを使用せず、loadMovieを使用し同様の事をしたいと思っています。どなたかよろしくお願い致します。 myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("photodata.xml"); v_titleArray = new Array (); v_xOffset = myBase._x; myXML.onLoad = function (loaded) { if (loaded) { v_rootNode = myXML.firstChild; v_num = v_rootNode.childNodes.length; v_currentPhoto = v_rootNode.firstChild; v_currentNumber = 0; for (i=0; i < v_num; i++) { v_loadURL = v_currentPhoto.childNodes[1].firstChild; v_titleArray.push (v_currentPhoto.childNodes[0].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; f_makeAndLoad (i, v_loadURL); } } else { trace ("error occured"); } }; XMLファイルのソースは次の通りです。 - <photo> - <picture> <file>photo1.jpg</file> </picture> - <picture> <file>photo2.jpg</file> </picture> - <picture> <file>photo3.jpg</file> </picture> - <picture> <file>photo4.jpg</file> </picture> - <picture> <file>photo5.jpg</file> </picture> </photo>

  • Flashにデータを呼び込む

    MySQLデータをFlashに呼び込む作業でどうしてもうまく行かなくて困っています。アクションスクリプトバージョンが2.0です。 dog.php というphpファイルで作って、MySQLデータを読み出すところまで成功しました。実際に、http://www.XXXXXX.com/dog.phpをブラウザで打つと 該当のデータが表示されます。 次に、下記のようにFlashにアクションスクリプトを書いてデータをFlashで表示させようとしていますが、、、なかなかうまく行きません。どこが間違っていますか?(なにも表示されません。) var theXML:XML = new XML(); theXML.ignoreWhite = true; theXML.onLoad = function() { var nodes = this.firstChild.childNodes; for(i=0; i<nodes.length; i++) { doglist.addItem(nodes[i].firstChild.nodeValue,i); } } theXML.load("http://www.XXXXXX.com/dog.php"); (ここで、doglistはコンポネットリストの変数です。) もし、このほかもっといい方法がありましたら、ご教授よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • FLASHでXMLを読み込んだときに読み込むまでにundefindがでてしまいます。

    flashで外部のxmlを読み込んでいるのですが、読み込むまでの間にテキストフィールド(v_title)にundefindがでてしまいます。原因がわかりません(><)どなたかぜひ教えてくださいませ。 myXML = new XML (); myXML.ignoreWhite = true; myXML.load ("blog/photodata.xml"); v_titleArray = new Array (); v_xOffset = myBase._x; myXML.onLoad = function (loaded) { if (loaded) { v_rootNode = myXML.firstChild; v_num = v_rootNode.childNodes.length; v_currentPhoto = v_rootNode.firstChild; v_currentNumber = 0; for (i=0; i < v_num; i++) { v_loadURL = v_currentPhoto.childNodes[1].firstChild; v_titleArray.push (v_currentPhoto.childNodes[0].firstChild); v_currentPhoto = v_currentPhoto.nextSibling; f_makeAndLoad (i, v_loadURL); } } else { trace ("error occured"); } }; function f_makeAndLoad (num, path) { myBase.myLoad.duplicateMovieClip ("myLoad"+num, num+1); v_name = eval("myBase.myLoad"+num); v_name._x = 156 * num; v_name._y = 0; v_name.loadMovie (path); myBase.myLoad._visible = false; } myNext.onRelease = function () { _parent._parent._parent.sound1.start(); if (v_currentNumber < v_num-1) { v_currentNumber+=1; }else{ _parent.nextFrame(); } }; myBase.onEnterFrame = function () { this._x += ((-156*v_currentNumber + v_xOffset)-this._x) ; v_title = (unescape(v_titleArray[v_currentNumber])); };

    • ベストアンサー
    • Flash
  • 配列での管理について

    外部JPGファイル名が記述してあるXMLファイルを読み込んで,サムネイルインスタンスを生成したいと思います。 構想としては 1、読み込んだXMLファイルのノードの数(変数名:menu_num)を参照。 2、ノード数の分attachMovieメソッドでシンボル(識別子:thum-menu)の生成を繰り返す 3、生成したシンボルに含まれるムービークリップインスタンス(インスタンス名:jpg_mc)にloadMovieメソッドで外部JPGをロードする 途中まで作ったフレームアクションが下記の通りです。 // 1 System.useCodepage = true; var obj_xml:XML = new XML(); obj_xml.ignoreWhite = true; obj_xml.load("sample.xml"); obj_xml.onLoad = start_me; function start_me(success:Boolean):Void {    if (success == true) {    var nodeList:Array = obj_xml.firstChild.childNodes;    var menu_num:Number = nodeList.length; // 2. インスタンスの生成と設定   for (var i:Number = 1; i<=menu_num; i++) {    var menu_str:String = "thum-menu0"+i;     _root.attachMovie("thum-menu", menu_str, i);    trace(i); これ以降(行程2)で生成した複数のシンボルを配列で管理したいのですが、なかなかうまくいきません。どなたかおしえていただければ幸いです。 ちなみにXMLファイルのノード数の取得はちゃんとできてるようです。 使用ソフトは Flash 8 で ActionScript2.0 です。

  • XML読み込みのテキストが表示されません

    FLASHで簡単な写真のスライドショーを作っています。 いろいろな例を参考に下記の段階まで作業を進めましたが、イメージは表示されたものの、どうしてもXMLからのテキストが読み込めず困っています。いろいろと調べてはみましたが、初心者ゆえ一人では解決できそうにありません。どなたか目を通して間違いを指摘していただけませんでしょうか?よろしくお願いします。 XMLファイルの記述: <?xml version="1.0" encoding="UTF-8"?> <Slides> <slideNode jpegURL="photos/photo1.jpg">#1 ABCDE</slideNode> <slideNode jpegURL="photos/photo2.jpg">#2 ABCDE</slideNode> <slideNode jpegURL="photos/photo3.jpg">#3 ABCDE</slideNode> </Slides> </xml> ActionScriptの記述: myXML.load("path_to_xml/data.xml"); var slides_xml = new XML(); slides_xml.load("slides.xml"); slides_xml.ignoreWhite = true; slides_xml.onLoad = startSlideShow; function startSlideShow(success) { if (success == true) { rootNode = slides_xml.firstChild; totalSlides = rootNode.childNodes.length; firstSlideNode = rootNode.firstChild; currentSlideNode = firstSlideNode; currentIndex = 1; updateSlide(firstSlideNode); } } function updateSlide(newSlideNode) { imagePath = newSlideNode.attributes.jpegURL; slideText = newSlideNode.firstChild.nodeValue; loadMovie(imagePath, targetClip); }

  • XML::XPathを使う

    エラーがでて期待する出力が出ず困っています。 ファイル名とXPathのコマンドライン引数をとり、 指定されたパスに一致するノードを出力するものです。 (参考書の写しなので、記述ミスはないと思います。) ■grabber.pl use XML::XPath; use XML::XPath::XMLParser; my $xpath = XML::XPath->new( filename => shift @ARGV ); my $nodeset = $xpath->find( shift @ARGV ); foreach my $node ( nodeset->get_nodelist ) { print XML::XPath::XMLParser::as_string( $node ) . "\n"; } コマンドラインに入力しているものは、 perl grabber.pl data.xml "/inventory/category/item/name" ■data.xml <?xml version="1.0"?> <inventory date="2001"> <category> <item id="2"> <name>aaaa</name> </item> </category> </inventory> です。 perl grabber.pl data.xml "/inventory/category/item/name" としても、下記にエラーが出ます。 Can't locate object method "get_nodelist" via package "nodeset" (perhaps you for got to load "nodeset"?) at grabber.pl line 5. いろいろ試してみたり調べたのですが、 行き詰ってしまいました。 期待する出力は"<name>aaaa</name>"なのですが・・・ どなたかこのエラーの原因がおわかりになるかた いらっしゃいますでしょうか。 環境は以下になります。 ・windowsxp ・activePerl モジュールのインストール済み ・XML-XPath ・XML-Parser 以上です。

    • ベストアンサー
    • Perl
  • スマートフォンで動かない

    http://yoneyone.my-sv.net/XmlSelectBox.htm ページですが以下のjavascriptを修正しスマートフォンで動かす事は可能でしょうか? 解決できない場合、スマートフォンで動かないjavascriptを記述していると思うのですが、 原因ってなんなのでしょうか? 以下がjavascriptです。 function xmlselectbox(id,xml_url,key,func){ var callback_func=func; var outarea=document.querySelector(id); var xml={}; var items=[]; var XHR= new XMLHttpRequest(); while(outarea.hasChildNodes()){ outarea.removeChild(outarea.lastChild); } //XMLのロード(エラー処理省略) XHR.open("GET",xml_url,false); XHR.send(null); if(XHR.status == 200) xml=XHR.responseXML; //if(xml.hasOwnProperty("SelectionLanguage")) //IEは使えない if(typeof xml.hasOwnProperty === "undefined") //とりあえず xml.setProperty("SelectionLanguage","XPath"); //IEにのみ必用 //最初のSELECTBOX生成 items=getitem("/descendant::node()/child::"+key,xml); var first_contener=document.createElement("div"); var first_selectbox=document.createElement("select"); first_selectbox.setAttribute("name",key); first_selectbox.add(new Option(key+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ first_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 first_selectbox.onchange=select_change(first_selectbox,xml,outarea); first_contener.appendChild(document.createTextNode(key+":")); first_contener.appendChild(first_selectbox); outarea.appendChild(first_contener); first_selectbox.selectedIndex=0; //SELECTBOXをどんどん作成 function select_change(selectbox,xml,outarea){ return function(){ var items=[]; items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[contains(self::node()/text(),'" + selectbox.value + "')]/child::*",xml); /* *********************************************************************************** normalize-space()は空白をtrimするだけ。 OK items=getitem("/descendant-or-self::node()/child::" + selectbox.name + "[normalize-space(self::node()/text())='" + selectbox.value + "']/child::*",xml); OK items=getitem("//"+selectbox.name+"[normalize-space(./text())='"+selectbox.value+"']/*",xml); ×? items=getitem("/descendant-or-self::" + selectbox.name +"[normalize-space(.)= '" + selectbox.value + "']/*",xml); */ if(items.length>0){ if(selectbox.parentNode.nextSibling){ if(selectbox.parentNode.nextSibling.lastChild.getAttribute("name")==items[0].nodeName) outarea.removeChild(selectbox.parentNode.nextSibling); } var next_contener=document.createElement("div"); var next_selectbox=document.createElement("select"); next_selectbox.setAttribute("name",items[0].nodeName); next_selectbox.add(new Option(items[0].nodeName+"を選択してください","default"),null); for(var i=0;i<items.length;i++){ next_selectbox.add(new Option(items[i].firstChild.nodeValue,items[i].firstChild.nodeValue),null); } //イベント追加 next_selectbox.onchange=select_change(next_selectbox,xml,outarea); next_contener.appendChild(document.createTextNode(items[0].nodeName+":")); next_contener.appendChild(next_selectbox); if(selectbox.parentNode.nextSibling){ outarea.insertBefore(next_contener,selectbox.parentNode.nextSibling); }else{ outarea.appendChild(next_contener); } next_selectbox.selectedIndex=0; }else{ if(typeof callback_func != "undefined") callback_func(selectbox.getAttribute("name"),selectbox.value); } } } //XPATHで検索 function getitem(xpath,xml){ var nodeValues=[]; var NodeList,Nodelength; try{ NodeList = xml.evaluate(xpath,xml,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null); }catch(e){ NodeList = xml.selectNodes(xpath); } Nodelength=NodeList.snapshotLength||NodeList.length; for(var i=0;i<Nodelength;i++){ nodeValues[i]=(typeof(NodeList.snapshotItem)==='undefined')?NodeList.item(i):NodeList.snapshotItem(i); //console.log(nodeValues[i]); } return nodeValues;