• ベストアンサー

XMLHttpRequestオブジェクトによるレスポンスを複数回受けるには?

buffalomasaの回答

回答No.2

こんにちわ。 例えば、 obj.open("GET","/test.txt"); の箇所を var rnd = Math.floor(Math.random() * 10000); var file = "/test.txt?" . rnd; obj.open("GET","file"); とかにすればどうだろうか?

OKbokuzyo
質問者

お礼

回答ありがとうございます。 申し訳ありません、私の知識不足のため、 回答文のコードが何をしているのかわかりません。 みた感じでは、0~10000の整数をtest.txtの引数に与えているようですが?? (すみません、この解釈があっているのかどうかもわかりません。) 0~10000ミリ秒待っている感じでしょうか? お手数ばかりかけまして大変恐縮ですが、 できればもう少し詳細な情報を頂けましたら幸いです。 よろしくお願い申し上げます。

関連するQ&A

  • CGIを呼び出した場合の戻り値をDOMオブジェクトにする

    var rtn; var obj = new XMLHttpRequest(); obj.open("GET","/test.xml"); obj.setRequestHeader(~略~); obj.send(""); obj.onreadystatechange = function( ){   if(obj.readyState == 4){     rtn = obj.responseXML);   } } この場合のrtnの値はtext.xmlのDOMオブジェクトとなりますが、 これを、 var obj = new XMLHttpRequest(); obj.open("GET","/test.cgi"); obj.send(""); とし、cgiからの戻り値としてDOMオブジェクトを受けることは可能ですか? やはりcgiからプログラムを通じてxmlファイルを作成し、 それをもう一度、 obj.open("GET","/test.xml"); obj.send(""); として読み込むしかないでしょうか?

  • XMLHTTPRequestでstatusが0に

    2日程、色々と試したのですが、どうしても自分で解決できそうにないので お世話になりたいと思い質問させて頂きました。 XMLHttpRequestを使用し、サーバーと非同期通信を行っているのですが ChromeとFireFoxの場合、戻り値のstatusが0になり、サーバーからのレスポンスデータを 取得する事ができません。IEでは7 ~ 9まで正常に動作する事を確認しております。 (環境) クライアントOS:Windows7 Professinal サーバーOS:Windows7 Professinal Webサーバー:IIS7.5 ブラウザ:Google Chrome 16.0.912.77 m, FireFox 10.0.1 (クライアント側プログラム) function requestMain(param) {   // サーバー名はxxxにさせて頂きました。   var url = "http://xxx.xxx.xxx.xxx/app/xhr.cgi?" + param;   var obj = createHttpRequest();   obj.open("GET", url, true);   obj.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");   ojb.onreadystatechange = function()   {    if (obj.readyState==4)    {      alert(obj.status);       // ← ここが0に。IEだと200が返ってきます。      alert(obj.responseText);   // ← IEの場合予期したデータがきます。Chrome/FF                        // ともに空です。    }   }   httpoj.send(""); } function createHttpRequest() {   if(window.ActiveXObject)   {    try    {     return new ActiveXObject("Msxml2.XMLHTTP");    }    catch (e)    {     try     {       return new ActiveXObject("Microsoft.XMLHTTP");     }     catch (e2)     {      return null;     }   }  }  else if(window.XMLHttpRequest)  {   return new XMLHttpRequest();  } } (サーバー側) static void main(string[] args) {   string rtnStr = "HTTP/1.0 200 OK\n";   rtnStr += "<head>\n";   rtnStr += "Access-Control-Allow-Origin:*\n" // ← クロスドメイン対策???   rtnStr += "Content-Type: text/html; charset=UTF-8;\n;   rtnStr += "</head>\n\n";   rtnStr += "<body>test is</body>";   Console.WriteLine(rtnStr); } 試しに、prototype.jsのAjax.Requestを使用しても結果は同じでした。 後、プログラムでなく、ブラウザーのURL覧からCGIをコールするとtest isが表示されます。 ※ CGIはC#で書いています。ASP.NETがあるので意味がないのですが すみません。^^; 過去にも似たような質問をされた方がいらっしゃったのですが 結局クロスドメインの問題じゃない?とか回答がついてないとかで 答えがわかりませんでした。英語サイトにはそれなりに情報があるみたいですが 読めないのでよくわかりません ;_; (調べろと言われればそれまでなのですが。。。) 組み込み系や、C/S・スタンドアロンでのWindowsアプリはそれなりの経験を 持っているのですが、Web系は今回初めてで、やり始めて丁度10日になります。 ですので、トンチンカンなご質問をしているかもわかりませんが、 どうぞよろしくお願いいたします。 P.S 最近html, css, javascriptがお試し程度にわかり4、5ページ画面遷移した 簡単なクライアント側アプリを作れる程度です。

  • XMLHttpRequestオブジェクトが思うように動作しない

    XMLHttpRequestオブジェクトが思うように動作しない 質問させてください。 JAVASCRIPTでRSSリーダーを作成しているのですが、うまく作れません。 処理は以下のように行っています。 1. RSSのURLを配列に格納する。 2. XMLHttpRequestオブジェクトを作成する。 3. 配列の要素数だけforループを行い、ループ内でopen処理とコールバック関数の設定を行う。 僕の行っている処理では、なぜか最後に登録したURLのRSSだけが表示されます。(push,popしているので最後に登録=最初にopenする) 参考までにコードを以下に記載します。 どうかお知恵をお貸しください。 //ファイルにアクセスし受信内容を確認します methodは'GET' function requestFile( data , method ) { URLList = new Array(); URLList.push(URL1); URLList.push(URL2); //XMLHttpRequestオブジェクト生成 httpoj = createHttpRequest() //[1] for (i = 0; i < URLList.length; i++) { //open メソッド // HTTP上のXMLでないと駄目・・・? URL = URLList.pop(); document.getElementById('test1').innerHTML += URL; httpoj.open( method , URL , 'false'); //[2] //受信時に起動するイベント httpoj.onreadystatechange = function() //[4] { //readyState値は4で受信完了 if (httpoj.readyState==4) //[5] { //コールバック on_loaded(httpoj); } } } //send メソッド httpoj.send( data ); //[3] }

  • flash javascript php の引数受け渡しで

    http://61.197.170.205/~tobacco/htdocs/test.php があり。戻り値があります。 javascriptに var req_argument = null; function File_Request(data, fileName){ //XMLHttpRequestオブジェクト(ブラウザー対策できてるものとして) var http_obj = new XMLHttpRequest(); http_obj.open("POST", fileName); http_obj.onreadystatechange = function(){ if(http_obj.readyState == 4){ req_argument = http_obj.responseText; } } http_obj.setRequestHeader('Content-Type','text/plain;charset=UTF-8'); http_obj.send(data); } function flash_kick(argument) { File_Request(argument, "http://61.197.170.205/~tobacco/htdocs/test.php"); return req_argument; } を設置したページを用意し、さらにactionscript上に以下と「bt_test」ボタン・「kakunin_text_box」のあるflashを配置しました。 import flash.external.*; bt_test.addEventListener(MouseEvent.MOUSE_UP, test_action); function test_action(e){ var argument:String = "渡したい引数"; var s:String = String(ExternalInterface.call("flash_kick", argument)); kakunin_text_box.text = s; }; うまくいかず、http_obj.readyState == 4を待ってくれないのでnullが戻ってきます。 どのような処理をするとスムーズにphpの返り値をflashへ受け渡せるのか、ご教授いただけると嬉しいです。 質問用書き換え時に文法エラーあったらごめんなさい。

    • ベストアンサー
    • AJAX
  • XMLHttpRequest() Ajaxについて

    こんにちは。Ajaxに挑戦しているのですが、テキストフィールドに入力して送信ボタンを押したら、自作関数の XmlHttpRequest()を呼び出して、kakunin.jspに飛ばして、kakunin.jspで作ったコードを<result>タグ内に表示し、その際現れる「削除」ボタンをクリックしたら、今度は自作関数 deleteRequest()を呼び出し、sakujyo.jspに飛ばしてデータベースのレコードの削除を行い、<result>タグ内の表示をかえたいのですが、削除の方がうまくいっておりません(削除するボタンを押して、deleteRequest()は呼び出しているのですが、そのあと、delete.jspに飛ばず、kakunin.jspに飛びます)。以下が大まかなコードです。 function XmlHttpRequest(){ if(window.XMLHttpRequest){ httpObject=new XMLHttpRequest(); } else if(window.ActiveXObject){ httpObject=new ActiveXObjec("Msxml2.XMLHTTP"); } httpObject.onreadystatechange=display; 途中省略します。     httpObject.open("GET","kakunin.jsp?nen="+encnen+"&tsuki="+enctsuki+"&syaincode="+encsyaincode,true); httpObject.send(null); } function display(){ if(httpObject.readyState==4 && httpObject.status==200){ document.getElementById("result").innerHTML=httpObject.responseText; 省略します。 } } function deleteRequest(){ if(window.XMLHttpRequest){ delhttpObject=new XMLHttpRequest(); } else if(window.ActiveXObject){ delhttpObject=new ActiveXObject("Msxml2.XMLHTTP"); } delhttpObject.onreadystatechange=displaysql("削除しました"); 省略します delhttpObject.open("GET","delete.jsp?nen="+encnen+"&tsuki="+enctsuki+"&syaincode="+encsyaincode,true); delhttpObject.send(null); } function displaysql(msg){ if(delhttpObject.readyState==4 && delhttpObject.status==200){ document.getElementById("result").innerHTML=delhttpObject.responseText; alert(msg); kidou(); } } こういったやり方がわからなく、自己流でやってみましたので、おかしな部分もあるかもしれませんが、やりたい事は押すボタンによって、飛ばすjspファイルを変え、<result>タグ内の表示も、各jspファイルで、 出力されたものを表示させたいのですが、自分で考えたやり方ではどこか間違っているようですので、どなたかアドバイスの方、よろしくお願いいたします。 環境は、IE7です。よろしくお願いいたします。

  • XMLHttpRequestのブラウザ対応

    JavaScriptで、あるURLの結果を取得しようと以下のようなスクリプトを組みました。 var xmlHttp = false; function loadText(){ xmlHttp = new XMLHttpRequest(); xmlHttp.open("GET", "http://hogehoge, true); xmlHttp.onreadystatechange = checkStatus; xmlHttp.send(null); } function checkStatus(){ if (xmlHttp.readyState == 4 && xmlHttp.status == 200){ res = xmlHttp.responseText; alert(res); } } IE8では、結果が取得できたのですが、firefox4.0.1,Chromeでは取得できませんでした。 xmlHttp.status が0となってしまいました。 ただし、GET対象のURLをローカルサーバにすると、取得することができました。 firefox4.0.1,Chromeのブラウザの設定なのでしょうか?それともスクリプトの書き方に問題があるのでしょうか? すみませんが、教えてください。

  • onunload で XMLHttpRequest

    ページを閉じたことをサーバへ伝えたいと思って、onunloadイベントで XMLHttpRequest により URLにアクセスしたいのですが、うまくいきません。 onunload の中から下記のような処理を行う関数を呼び出しています。 try{ var url = "http://xxxxxxx/unlock.php?no=99"; var xhr = XMLHttpRequestCreate(); //マルチブラウザ対応 xhr.open("GET", url); xhr.setRequestHeader("Content-Type", "text/plain"); xhr.send(null); }catch(e){ console.log(e); } xhr.status を見てみたら 0 になっていました。onunload でも、onbeforeunload でも send() を行ったあとに xhr.status が 0 になるようです。 画面上にテストボタンを置いて onclick から呼び出してみると、うまく動作します。 console.log を表示するとちゃんと表示されるので、onunload も onbeforeunload も 正しくセットされていると思います。 ブラウザは、Chrome と Firefox の2種類で試しましたが、同様でした。 やはりフォームが閉じるときは XMLHttpRequest は使えないのでしょうか? 何か回避する方法はないでしょうか?

  • Ajaxで表示させると内容が不変

    下記Ajaxでtest.txtを表示できたのですが test.txtの内容を Hello Japan. 変えてもブラウザのキャッシュをクリアしない限り Hello World! が出つづけます。 下記ページにキャッシュ無効のヘッダをつけても同じです。 子の問題を解決する手段を教えてください。 test.txt: Hello World! x.html: <script> var xmlHttp; function loadText() {  if (window.XMLHttpRequest)  {   xmlHttp = new XMLHttpRequest();  }  else  {   if (window.ActiveXObject)   {    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");   }   else   {    xmlHttp = null;   }  }  xmlHttp.onreadystatechange = checkStatus;  xmlHttp.open("GET","test.txt",true); xmlHttp.send(null); } function checkStatus() { if (xmlHttp.readyState==4&&xmlHttp.status==200) { var node = document.getElementById("disp"); node.innerHTML = xmlHttp.responseText; } } </script> <form> <input type="button" value="push" onClick="loadText()"> </form> <div id="disp"></div>

  • 【ajax】 XMLHttpRequestオブジェクトを作成し連続でsend

    連続して非同期の通信を行う方法が分からず困っています。 下のようなコードを書きました。 クライアントからサーバにある「hoge1.txt」をGETするというものです。 その処理を行う関数(httpXMLRequest)を一つだけ呼び出すとうまくいきます。しかし二つ目に読み込んだ処理が実行されません。 同時に、というのは無理なのでしょうか。。 --------             ・             ・             ・ httpXmlRequest('hoge1.txt','GET','',dspXMLElement,httpError) //httpXmlRequest('hoge2.txt','GET','',dspXMLElement,httpError) } function httpXmlRequest \ (target_url,method,data,success_func,error_func){ httpObj=new XMLHttpRequest() timerId=setInterval('timeoutCheck()',1000) httpObj.open(method,target_url,true) httpObj.onreadystatechange=function(){ if(httpObj.readyState==4){ clearInterval(timerId) if(httpObj.status==200){ success_func(httpObj.responseXML) httpObj.abort() } else{ erro_func(httpObj.status+':'+httpObj.statusText) return false } } } httpObj.send(data) } 以上、よろしくおねがいします。

  • XMLHttpRequestでキャッシュを使用させないようにしたい

    ある場所にonMouseoverで ツールチップのようにデータを XMLHttpRequestを使用して読み込み、表示しています。 読み込みは getPage('xxx.php?id=$id') というようにPHPを使用してDBを読み取り、 該当のIDの情報を読み出しているのですが、 この情報が編集されることがあります。 しかし、一回開いてしまうと、キャッシュが効いているのか、内容を編集しても編集後の内容を取ってくれません。 テストをした結果ブラウザを閉じるか、キャッシュを削除すれば又最新の情報を表示してくれるのですが、 読み込むごとに最新の情報にアクセスする(キャッシュを使用しない)方法はないでしょうか。 ブラウザはIEを使用しています。 よろしくお願いします。 以下ソース function getPage(pageURL) { document.charset='EUC-JP'; if(document.all){ rx = event.clientX + document.body.scrollLeft; ry = event.clientY + document.body.scrollTop; }else{ rx = NNX; ry = NNY; } xmlhttp = createXMLHttp(); if (xmlhttp) { xmlhttp.onreadystatechange = setPageData; xmlhttp.open('GET', pageURL,true); xmlhttp.send(null); }else{ alert("XMLHttpRequest失敗"); } } function setPageData() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { opentext( [xmlhttp.responseText] ,rx,ry); //↑表示用ルーチンに受け渡しているだけなので割愛 } } // XMLHttpsオブジェクト作成 function createXMLHttp() { try{ return new ActiveXObject ("Msxml2.XMLHTTP"); }catch(e){ try { return new ActiveXObject ("Microsoft.XMLHTTP"); }catch(e){ try { return new XMLHttpRequest(); }catch(e) { return null; } } } return null; }