DBで新規追加したデータがAjaxで反映されない

このQ&Aのポイント
  • Apach・PHP・MySQLの構成でWEBアプリを作成しています。データ表示画面でセレクトボックスを二つ設置し、一つ目のセレクトボックスを選択した時、OnChangeイベントでAjaxを利用し選択されたデータのキーに紐づくデータを取得して二つ目のセレクトボックスに表示するといった処理を作りたいと考えています。しかし、二つ目のセレクトボックスに表示するデータを新規登録で追加しても、再度一つ目のセレクトボックスを選択しても追加したデータが表示されません。ページロードや別画面から再度遷移してきても結果は同じです。一度ブラウザを閉じて再度接続すると追加したデータが表示されます。
  • Ajax部分のソースコードを確認しましたが、問題が見つかりませんでした。新規追加したデータがAjaxで反映されない原因は不明です。IE6.0でこの問題が発生している可能性があります。IE6.0は古いバージョンのため、互換性の問題が発生することがあります。他のブラウザや新しいバージョンのIEで試してみることをおすすめします。また、Ajax以外の原因として、データの追加処理や表示処理に問題がある可能性も考えられます。コードの一部を見る限りでは、問題があるようには見えませんが、詳細な情報がないため確証はありません。
  • 解決策としては、以下の方法が考えられます。まず、ブラウザのキャッシュをクリアしてみることです。ブラウザのキャッシュが問題を引き起こしている場合、キャッシュをクリアすることで問題が解消することがあります。次に、Ajaxの処理を見直してみることです。Ajaxの処理に問題がある可能性があるため、一度コードを確認し、適切な修正を加えることが必要です。また、データの追加処理や表示処理に問題がある場合、それぞれの処理を見直す必要があります。データの追加処理が正しく実行されているか、表示処理が正しく行われているかを確認しましょう。さらに、バージョンの問題である可能性も考えられます。使用しているバージョンの組み合わせによっては互換性の問題が発生することがあります。バージョンを変更することで問題が解消する可能性があります。
回答を見る
  • ベストアンサー

DBで新規追加したデータがAjaxで反映されない

いつもお世話になっております。 Apach・PHP・MySQLの構成でWEBアプリを作成しております。 データ表示画面でセレクトボックスを二つ設置して、 一つ目のセレクトボックスを選択した時、OnChangeイベントで Ajaxを利用し選択されたデータのキーに紐づくデータを取得して 二つ目のセレクトボックスに表示するといった処理を作りたいと考えています。 実際にプログラムを組み実装できたのですが、二つ目のセレクトボックスに表示する データを新規登録で追加して、再度一つ目のセレクトボックスを選択して データ表示をおこなっても、追加したはずのデータが表示されません。 ページロードや別画面から再度遷移してきても結果は同じなのですが、 一度ブラウザ(IE6.0)を閉じて再度接続してセレクトボックスを選択すると 追加したデータが表示されます。 以下が該当するAjax部分のソースです。 var Ajax; function CreateAjax(){ try{ Ajax = new ActiveXObject("Msxml2.XMLHTTP"); return Ajax; }catch(e){ Ajax = new ActiveXObject("Microsoft.XMLHTTP"); return Ajax; } } function fncAjax(strURL, strID){ try{ Ajax = CreateAjax(); Ajax.open("GET",strURL); Ajax.onreadystatechange = function(){ if(Ajax.readyState == 4 && Ajax.status == 200){ var obj = document.getElementById(strID); obj.innerHTML = Ajax.responseText; } } Ajax.send(null); }catch(e){ alert(e.description); } } function js_OnSelChange(){ try{ fncAjax("http://hogehoge.com/?key=" + document.form.selectdata.value, "ID"); }catch(e){ alert(e.description); } } どなたか対応策をご存知でしたら、ご教授願いいます。 以上。

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

  • ベストアンサー
回答No.1

ブラウザが、Ajaxのリクエストで、ローカルのキャッシュを読みに行ってしまうのが原因だと思います。 googleなどで「ajax キャッシュ」で検索すると出てきますが、AjaxのリクエストでIf-Modified-Sinceヘッダを付けるとよいみたいです。 もしくは、ajaxでリクエストするURLを都度変えることでも対応できると思います。例えばhttp://hogehoge.com/?key=1&dummy=92843231のような感じで、乱数(Math.random)で生成したダミーパラメータをURLの末尾につけます(たまに、二回続けて同じ乱数になることもあるでしょうけども)。

ki-torneo
質問者

お礼

早速のご回答ありがとうございます。 教えていただいた通り、乱数を設定してリクエストを送ったらデータが反映されました! キャッシュが悪さしてるかなとは思っていたのですが、content='no-cache'とかにしても変化ないので違うのかなと思ってました・・・ 「ajax キャッシュ」についても調べて、勉強してみます。 ありがとうございました!

関連するQ&A

  • Ajax は NN でも使えますか?

    初歩的な質問ですみません。 Ajax の非同期通信で、XMLHTTP オブジェクトを作成するスクリプトを見ると、 function createXMLHttpRequest() { var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } return XMLhttpObject; } のように Microsoft のオブジェクトを読み込んでいるように見えるのですが、NN でもつかえるのでしょうか。 また、Macintosh との互換性はどうなのでしょうか。 ご存知の方はお教えください。

  • ajax でのデータ受け渡しに関して

    ajax でのデータ受け渡しに関して わかりにくい内容で申し訳ありません。 現在、PHPで作成されているプログラムの中に、ajaxを組み込みたいと考えています。 処理の動きとしては、あるプルダウンが選択された場合、すぐさまその値をもとにしてDBへ 検索しに行くというものです。 通常、PHPだけの処理の場合、POST等を用いて、ボタンが押されたら違うphpファイルへ値を 送る事が可能かと思われます。 その処理をajax で選択されたらすぐに検索、表示というような動きをしたいと考えて います。 但し、同じソース、画面上の中でなら、以下のような記述で表示させる事は可能かと 思われますが、HTMLで分割した画面で、上段で選択されたプルダウンの値をもとにして、検索 された結果を下段に表示させたいと考えています。 そもそも、ajaxでは同じ画面上での受け渡ししかできず、上記のように分割されたものでは 不可能なのでしょうか。。。 初歩的な内容で申し訳ありませんが、教えて頂きたいと思います。 《記述内容》 ※ 現状では以下のようなサンプル記述をもとに、自画面(同一)上では表示が可能となっています。 <script> function createXMLHttpRequest(){ if( window.XMLHttpRequest ){ return new XMLHttpRequest(); }else if( window.ActiveXObject ){ try{ return new ActiveXObject( "Msxml2.XMLHTTP" ); }catch(e){ return new ActiveXObject( "Microsoft.XMLHTTP" ); } } return null; } function getDataPost( serverURL, objID ,obj){ var ajax = createXMLHttpRequest(); ajax.open( "POST", serverURL ); ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); ajax.onreadystatechange=function(){ if(( ajax.readyState == 4 ) && ( ajax.status == 200 )){ if(objID!=""){ var obj = document.getElementById( objID ); obj.innerHTML = ajax.responseText; } } } ajax.send( obj.name+"="+obj.value ); } </script> <select name="fuga" onchange="getDataPost('hogehoge.php','hoge',this)"> <option value="">---</option> <option value="1">1</option> <option value="2">2</option> </select> <div id="hoge"></div> よろしくお願いします。

    • ベストアンサー
    • AJAX
  • DOMの種類を一覧できるサイト

    今はやりのAjax用関数で以下のようなものがあります。 function createXMLHttpRequest(){ var XMLhttpObject = null; try{ XMLhttpObject = new XMLHttpRequest(); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ XMLhttpObject = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ return null; } } } return XMLhttpObject; } IEやそれ以外のブラウザで利用可能なActiveXObject(DOM)を選択できるようになっていますが、ここで使われているMsxml2.XMLHTTPやMicrosoft.XMLHTTPのようなDOMがたくさんリストアップされているサイトを探しています。最初にこの関数を作った人はどうやってこれらのDOMを見つけたのか気になりますし、自分で似たような関数を作ってみたいので。どうか情報提供をお願いいたします。

  • Ajaxのプログラムをオブジェクト指向で・・・

    Ajaxのプログラムを一つのオブジェクトにまとめてみようと思ってやってみたのですが、 >エラー: プロパティ 'readyState' の値を取得できません: オブジェクトは Null または未定義です。 などと表示されて上手く行きません。 何が悪くてエラーが出るのかが理解出来ていません。 詳しい方、エラーの原因・解決方法を教えてください。お願いします。 php側 echo "test"; javascript側 //-------------------------------------------------------------------- // てすとオブジェクト //-------------------------------------------------------------------- var Test = function() {// メンバ変数の定義 this.request = ""; this.query = "test";// クエリ this.response = "";// レスポンス }; Test.prototype = {// プロトタイプの定義 /* データ送信 */ tSend : function() { if(this.query) { this.request = this.ajaxRequest(); this.request.onreadystatechange = this.tLoad; if(this.query) { this.request.open("POST", "./index.php", true); this.request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); this.request.send(this.query); } } }, /* データ受信 */ tLoad : function() { if((this.request.readyState == 4) && (this.request.status == 200)) { alert("test"); } }, /* HTTP通信用 */ ajaxRequest : function() { var value = null; try { value = new XMLHttpRequest(); } catch(e) { try { value = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { value = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { return null; } } } return value; } }; //----------------------------------------------------------------------- // 実行 //----------------------------------------------------------------------- var Test = new Test();// 通信用オブジェクトの生成 Test.tSend();// データ送信

  • AJAXでサイト存在チェック時、スクリプトエラー

    AJAXを使用し、遷移したいサイトが存在する場合、その際サイトに遷移し、存在しない場合は、ほかのサイトに遷移するという処理を行いたいのですが、スクリプトエラーが発生しまい困っています。 遷移先をローカルサーバのリンクを指定するとうまくいくのですが、外部サーバのアドレスを指定するとエラーになってしまいます・・。何か制約があるのでしょうか? また、ほかの方法で実現できるのであれば、教えてください。 現在記述しているソースの一部を下記に添付します。 <script language="JavaScript" type="text/JavaScript"> <!-- function fucXMLHttpRequest(){ /* XMLHttpRequestオブジェクト作成 */ var xmlhttp = createXmlHttp(); xmlhttp.onreadystatechange = handleHttpEvent; function handleHttpEvent(){ if (xmlhttp.readyState == 4) { if (xmlhttp.status == 200) {       window.open("http://www.inte.co.jp/xxxx/xxxx"); } else { window.open("http://www.inte.co.jp/"); } } } xmlhttp.open("GET", "http://www.inte.co.jp/xxxx/xxxx" , true); xmlhttp.send(null); return false; } function createXmlHttp(){ if (window.XMLHttpRequest) { return new XMLHttpRequest(); } else if (window.ActiveXObject) { try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { return new ActiveXObject("Microsoft.XMLHTTP"); } } else { return null; } } //--> </script> </head> <a href="#" onClick="fucXMLHttpRequest()">詳しくはこちら</a>

  • Ajaxでデータベース(PostgreSQL)

    を非同期で読み込むことができるでしょうか? ファイルならば下記のようにすれば良いみたいですが データベースの場合のやり方がわかりません。 PostgreSQLのデータを読み込むにはどうしたら良いのでしょうか? <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","plan.txt",true); xmlHttp.send(null); } function checkStatus() { if(xmlHttp.readyState==4 && xmlHttp.status==200) { alert(xmlHttp.responseText); } } </script> <form> <input type="button" value="read file" onClick="loadText()"> </form>

  • 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>

  • 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; }

  • AjaxでMySQLへのデータの追加と表示をしたい

    htmlで、jQueryでMySQLのテーブルmessage_tableのデータid(int auto_increment primary)、time(datetime)、message(varchar(1000))を<tr><td>id</td><td>time</td><td>message</td>というような形で、<table id="show_table"><table>の中で全行表示し、inputのtextから新たにmessageを送信したら、それがリロードなしに同じテーブルに追加されて、表示されるというAjaxを使ったプログラムをhtmlとPHPファイルで作成したいのですが、どのようなソースを書けばよろしいでしょうか。 PHP側はMySQLのデータの取得と、htmlから送られてきたデータの追加を行い、JSON形式でhtmlに投げるという風にしたいと考えています。 データの表示と送信をするhtmlと、データを受け取り、MySQLのテーブルに追加し、htmlに返すPHPのソースは、以下のような形を考えています。 [message.html] <!DOCTYPE html> <head> <meta charset="UTF-8"> <title>message.php</title> </head> <body> <p> <input type="text" id="messgage"> <input type="button" id="add" value="add"> </p> <table id="show_table"></table> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script> <script type="text/javascript"> $(function(){ $('#add').click(function(){ $.post('post.php',{ }, function(引数){ //処理 }) }); }); </script> </body> </html> [post.php] <?php try{ $pdo = new PDO('mysql:dbname=test; host=localhost; charset=utf8', 'root'); }catch(PDOException $e){ die($e->getMessage()); } $st = $pdo->query("SELECT * FROM message_table"); // データの取得 header('Content-Type: application/json; charset=utf-8'); echo json_encode($result);

    • ベストアンサー
    • AJAX
  • IE6 + javascript

    すみません、先ほども質問したのですが、締め切ってしまったのでもう一度質問させてください。 下記コードが、Firefoxでは動作するのですが、IEではjavasciptの部分が動作していません。 もちろん、javascriptの設定は有効にしてあります。 var browser = navigator.appName; if(browser.charAt(0) == "N") { window.addEventListener("load",change_page(page_id),false); } else if (browser.charAt(0) == "M") { window.attachEvent("onLoad",change_page(page_id)); } .... function httpRequest() { if (window.ActiveXObject) { try { httpObj = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { try { httpObj = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { httpObj = false; } } } else if (window.XMLHttpRequest){ try{ httpObj = new XMLHttpRequest(); } catch(e) { httpObj = false; } } return httpObj; } change_page()はfunctionです。 なぜIE6ではjavascriptが動かないのでしょう? ソースのどこが悪いのかわからず、どなたかアドバイスあればお願いします!

専門家に質問してみよう