JSファイル(JQuery)の読み込みについて

このQ&Aのポイント
  • セレクトボックスで指定した画像が表示されない問題について
  • JSファイルのキャッシュが原因で画像が変わらない
  • キャッシュ無効の方法やURLに日付を付ける方法が効果なし
回答を見る
  • ベストアンサー

JSファイル(JQuery)の読み込みについて

セレクトボックスで、猫を選択したらAというJSファイルが動き、BというJSファイルに猫の画像URLを書出しています。 ボタンを押したら、BのJSファイルが動き、ページ上に猫の画像が表示されるというようなものを作っています。 セレクトボックスを変更し、ボタンを押すたびに、画像を変えたいのですが、うまく変わりません。 Bへの書出しはうまく行っていて、セレクトボックスを変えて、ボタンを押してから、ページ更新をして、もう一度ボタンを押すと、切り替わります。 セレクトボックス変更→ボタンを押す(変わらない)→ページ更新→ボタンを押す(変わる) この作業で、セレクトボックスで指定した画像が表示されるので、JSファイルのキャッシュが残っているのかなと思い、ヘッダーや、.htaccessで、キャッシュ無効のコードを書いたり、JSファイルのURL呼び出しに、日付を入れたりしてみた(~.js?20150209010101 など)のですが、こちらも有効になりません。 このような場合、なにか対処方法をご存知でしたら教えていただけませんでしょうか。 どうぞよろしくお願いします。

noname#223023
noname#223023
  • AJAX
  • 回答数6
  • ありがとう数6

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

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5068/13243)
回答No.6

グラフデータ部分を入れた新しいJSファイルを作成するのではなく、データだけをAjaxで取得してデータの入れ換えを行うような実装にすれば問題は無くなると思います。

noname#223023
質問者

お礼

t_ohtaさん コメントありがとうございます。 そのやり方で出来ないか試してみて、グラフデータ部分だけ読み込むようにしたのですが、グラフが表示されないです。。 なにが悪いのか、、 そのグラフデータ部分を書き出して、その部分をコピーしてそのまま入れ込んだらちゃんと表示されるので、変数で入れるとうまくいかないのか、、、よくわからないです。 また、replot(); というのも再描画に使えるみたいなので、使ってみようと思いますが、まずはグラフが変数でちゃんと表示されるようにやってみたいと思いますが、タイトルと内容が変わってきましたので、こちらは閉じて、また新しく投稿させていただこうかと思います。 ありがとうございました。 またよろしくお願いします。

その他の回答 (5)

回答No.5

もしかして、 Aのイベントで、サーバー上のBのjsファイルを更新しているので サーバー上で更新されたそのjsを再読み込みしたいということですね。 content="no-cache"を指定したり jsファイル名に日時をつけても、 イベントの発生のたびに そのページで読み込み済のjsファイルを破棄して、 サーバーから再読み込みするということではないので 考えかたを変えないと 難しいのでは? つまり、Aのイベントでサーバー上のjsを書き換えるのではなく Aのイベントでの動作をJavaScriptのグローバル変数なりに記録して Bではそれを参照して動作が可変するようにしたほうがスマートでは?

noname#223023
質問者

お礼

superside0 さん コメントありがとうございます。 http://alphasis.info/jquery-plugins/jqplot/ ↑このサイトのやり方ですと、グラフを書くために、グラフ表示のデータと、そのグラフ表示の仕様を書き込むコードが必要なのですが、可変するのは、グラフのデータ部分のみなんです。(セレクトボックス変更に基づき、取得したデータ) BのJSファイルはグラフ表示用のベースのファイルです。グラフデータを入れる部分を固定文字列にして、Cファイルを作るときに、Bファイルを読み込んで、グラフデータを入れる固定文字列を置換して、グラフデータを入れ、Cファイルを作成しています。 ボタンを押した時に、読み込むのは、Cファイルです。 >Aのイベントでの動作をJavaScriptのグローバル変数なりに記録して Bではそれを参照して動作が可変するようにしたほうがスマートでは? これは具体的にどのようにするのでしょうか。 可変のやりかたでグラフ切り替えもできるのでしょうか・・・? JSファイルは1つでということでしょうか。 すみません、ちょっとイメージが湧きづらいのですが、考えてみます。 ありがとうございます。

  • t_ohta
  • ベストアンサー率38% (5068/13243)
回答No.4

一度読み込んだJSファイルは、ボタンを押してJavaScriptを実行しただけでは再読み込みされないので、正しい動作をしていると言えます。 CGIでJSファイルを書き換えるような実装は良くありませんので、ボタンを押した際に実行されるJavaScriptはセレクトボックスの選択内容を見て、プログラム内で画像のURLを生成してimgタグを書き換えるような動作にするといいでしょう。

noname#223023
質問者

お礼

t_ohta さん コメントありがとうございます。 一度読み込んだJSファイルは、ボタンを押してJavaScriptを実行しただけでは再読み込みされないのですね! 数カ月前まではそれで切り替わっていたのですが、 最近確認したら、今まで動いていたものが動かなくなっていたのです。 ごめんなさい、わかりやすくと思って、簡単な例を上げたのですが、それですと教えていただきましたやり方でいいのかと思いますが、やりたいことを詳しくご説明しますね。 http://alphasis.info/jquery-plugins/jqplot/ ↑こちらのサイトを参考に、グラフを作成したいと思っています。 そのため、セレクトボックスでグラフ表示したいことを選択し、それに基づいて、JSファイル(Aファイル)からCGIを起動して、WEB上のDBから値を取得し、グラフデータ部分を作成して、グラフ読み込み用のベースのJSファイル(Bファイル)を読み込み、グラフデータ部分を入れた新しいJSファイル(Cファイル)を作成して、ページ上でボタンを押したら、新しいJSファイル(Cファイル)を読み込んで、グラフの表示、切り替えをしたいです。 ややこしいのですが、わかりますでしょうか。 今まで試行錯誤した結果、このやり方がいいのかなと思ってやっていたのですが、もし他にいい方法がありましたら教えて下さい。 二度手間になってしまってすみません。 ただ、数カ月前まではこのやり方でできていたので、なにかの仕様が変わったのか?プログラムは修正していないので、原因が全くわからないのです。。 よろしくお願いします。

  • t_ohta
  • ベストアンサー率38% (5068/13243)
回答No.3

JSファイルに画像URLを書出すというのは、具体的にどのような処理を行っているのでしょうか。 ブラウザからサーバ上にあるJSファイルを書き換えるような処理を行っているのでしょうか。

noname#223023
質問者

お礼

t_ohta さん コメントありがとうございます。 はい、処理はもっと複雑なので、質問では簡単な例を上げたのですが、 セレクトボックスを選択したら、JqueryからCGIにつなげて、CGI上でJSファイルの上書きをし、その上書きしたファイルをボタンを押したら起動させるようにしています。 よろしくお願いします。

回答No.2

ん?なんか途中までしか投稿されてない。 とどのつまり、 どうやって呼び出しているか、動いているソースを提示してください。

noname#223023
質問者

お礼

Taiyonoshizukuさん コメントありがとうございます。 どの部分を提示したらよろしいでしょうか。HTML部分でしょうか。 HTMLでしたら、ヘッダーは以下になります。 <!--キャッシュさせない--> <meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Pragma" content="no-cache"> <meta equiv="Expires" content="0"> キャッシュさせたくないJSファイルの呼び出しは以下です。 <script type="text/javascript">//<![CDATA[ var url = "http://~~/yobidasi.js?" + new Date().getTime(); document.writeln('<script type="text/javascript" src="' + url + '"><\/script>'); //]]></script> これで足りますでしょうか。 よろしくお願いします。

回答No.1

とどのつまり

関連するQ&A

  • prototype.jsとjquery.jsの併用がうまくいきません。

    prototype.jsとjquery.jsの併用がうまくいきません。 2つの機能をページに組み込みたいと思っています。 (1)横並びの画像が自動的にスクロールする (2)画像をクリックすると、ライトボックスで表示する 参考にしたのは下記のサイトです。 http://logicbox.net/jquery/simplyscroll/ http://www.lokeshdhakar.com/projects/lightbox2/ しかし、実際にページを作ってみるとどちらかの機能しか有効になりません。 どちらもいくつかのjsファイルを<script>タグで読み込みますが、 後から読み込んだ方しか有効に機能しないのです。 スクロールの方はjquery.jsを、ライトボックスの方はprototype.jsを使っているのですが、 それが良くないのでしょうか。 両方を機能させるにはどう直したらいいのか、ご教授下さい。 もしくは、両方がうまく機能しているサイトがあれば、URLを教えて下さい。 よろしくお願いします。

  • .jsファイルの読み込み

    ホームページビルダー11を使用しています。 プレビュー画面では.jsファイル(日時表示のスクリプト)箇所が正常に表示されるのですが、IE起動ボタンをクリックして確認すると表示されません。 ファイル名やパスは間違っていないのですが! これはビルダーの仕様のせいでしょうか?

  • jquery.jPrintArea.jsについて

    ページ内にクーポン(画像)を表示させており印刷して持ってくれば 割引などということをやりたく方法を調べたとこjquery.jPrintArea.js を利用すれば新たにウィンドを開かなくても指定した要素のみを印刷 できるという事を知り探してみたのですが本家のページが表示されず ダウンロードできない状態なのですが既にないのでしょうか? いくつかの参考サイトを見たのですがダウンロード先のリンクは全て 下記のurlになってました。 http://www.designerkamal.com/jPrintArea/ 基本的にページに表示されている画像さえ印刷していればOKなので このような事が手軽にできる方法などがありましたら他の方法でも 構いませんので教えてください!

  • jsファイルで配列を定義し、jsファイルを切りかえて使う

    お世話になります。 jsファイルで配列を定義し、その配列の内容を表示しています。 いくつかのjsファイルで配列を定義し、そのjsファイを切りかえることにより、表示する配列の内容を切りかえることはできないでしょうか。 例えば data_a.js DataAry = new Array( new WNData('2006/11/10','ああ','・・.html'), new WNData('2006/11/10','いい','・・.html'), ・・・・・ ); data_b.js DataAry = new Array( new WNData('2006/11/10','aa','・・.html'), new WNData('2006/11/10','bb','・・.html'), ・・・・・ ); dspDataAry.jsで function WNData(Date,Cmnt,Href,Target){ this.Date=Date; this.Cmnt=Cmnt; this.Href=Href; } function DspData(){ strhtml="・・・・ (DataAryを表示するhtmlを作成) return strhtml; } dspDataAry.htmlで <script type='text/javascript' src='dspDataAry.js'></script> <script type='text/javascript' src='data_a.js'></script> <body> <script type='text/javascript'><!-- document.write DspData(); //--> </script> <input id="btn_b" type="button" value="bを表示" onClick="bを表示する関数"<br> </body> とすれば、data_a.jsの配列の内容が表示されます。 ボタン「bを表示」を押すことにより、 data_b.jsを読み込んで、その内容を表示するようにできないものでしょうか。 onClick="bを表示する関数"この「bを表示する関数」をいう関数をどのように書いたらよいのかわかりません。 data_a.js、data_b.jsで定義する配列名は同じとします。 data_c.js、data_d.js・・・といくつかに分けたく思っています。 前もってdata_b.jsを読み込むのでなく、必要に応じて読み込んで表示するようにしたいのですが。 よろしくお願いいたします。

  • 拡張子【js】の使い方

    OSはWin XP。 メーラーはOEを使っています。 HTMLのメールで使いたくてSCRIPTのソースを DLしました。 その中に拡張子が【js】に成ったファイルが有り、 ソースの指定された所にそのファイルの所在URLを 貼り付け、一旦下書きフォルダに保存しました。 本来なら貼り付けたURLの所が 【cid:003f・・・・】などと変わりますが、 この【js】ファイルでは入力したURLのままで 変更されていません。 コレでは私には正常に見えているスクリプトを使った 画像も相手には見えません。 この場合、拡張子【js】ファイルは 使えないのでしょうか? 使うとすると如何すれば相手にも見えるように 出来るのでしょうか?

  • Javascriptの中に外部jsファイルを呼び出したい。

    入力フォームで都道府県などのたくさん項目がある プルダウンメニューやセレクトボックスを外部化し jsの中には document.write('<option value="1">北海道</option>'); document.write('<option value="2">青森</option>'); document.write('<option value="3">岩手</option>'); document.write('<option value="4">宮城</option>'); などとし、ファイル名は「todou.js」としました。 セレクトボックスの外部ファイルは document.write('<option value="1">インターネット</option>'); document.write('<option value="2">テレビ</option>'); document.write('<option value="3">新聞</option>'); などとし、外部ファイルは「kikkake.js」としました。 htmlのところには <tr><td>都道府県:</td> <td><select> <script src="select1.js"type="text/javascript"> </script> などとし、載せることはできました。 しかし、最後に送信ボタンを押した時に 確認するためにアラートで選択したものを出したい時に どうやって呼び出したらよいのでしょうか? 色々調べてみたらまず <script language="JavaScript" src"todou.js"></script> とすると書いてありました。 しかし複数の外部ファイルを呼び出すためにはどうしたら よいのでしょうか? あとアラートで確認するために function Check(){ var myTodou = document.myForm.src"todou.js".value; alert('都道府県:' + myTodou); とするのでしょうか? 不備部分がありましたらご指摘ください。 どうかよろしくお願いします。

  • jsファイルを使って、画像をhtmlファイルに・・・

    jsファイルを使って、一つのhtmlファイルにサムネイル版の画像を解説つきで並べて、その画像をクリックするとさらに大判の画像がもう一つのhtmlファイルで表示される。さらにその大きな画像をクリックすると、元のサムネイル版のhtmlファイルに戻る・・・ このような感じで作りたく、試行錯誤しておりましたがどうしてもhtmlファイルにうまく表示されません。 簡単に説明しますと、htmlファイルは2個でいろいろな画像を出力したいのです。それも表示されている画像をクリックするだけで、二つのhtmlファイルに行き来できるような。 どこかにフリーの配布などがあれば、教えていただけませんか?自分ではお手上げでした。 

  • jqueryの最初の読み込みだけが若干遅い

    現在やっている事としてはイメージとしてはページが表示され後、ボタンを押して ダイアログ(エディター)が表示させるものを作ってます。 jsの外部リンクが増えていき個人的に汚いなと思ったので下記のサイトを参考にして もう少し整理したいなと思って現在整理している最中です!! http://rfs.jp/sb/javascript/js-lab/getscript.html で、ここでちょっとした問題が発生しました!! Webページ全体が表示されるタイミングでダイアログに表示される一文字の一部が 表示されてすぐ消えます。一瞬で表示され一瞬で消える感じです。 その後はとくになんも問題なく何事もなくダイアログ(エディターの機能)は使うことができます。 気ならないレベルじゃないのでなんとか解決させたいです。 最初の読み込みが改善するにはどんな方法があるでしょうか。 想像でもいいのでご教示頂けないでしょうか。 作っている最中なので動かくなかったり様子がおかしいこともありますが、一応URLを 下記に記載しておきますので、もしよろしければご確認ください。 http://low-cost-travel.chobi.net/start_dialog.php

  • .jsファイルの記述をMacで変更したい

    Ajaxについて質問します。 ホームページ制作で、ThickBoxを使いHTMLファイルや画像を表示させていますが、表示されたウィンドウについているナビゲーション用の「Next」や「close」を「次へ」「閉じる」などと表示させたいのです。 とあるサイトに変更の仕方が書いてあったのですが、thickbox.jsファイルをDreamWeaver CS3で開いたところ、参考となる記述と大幅に食い違っているようなのです。とにかく変更箇所が確認できません。 ThickBoxは、http://kyosuke.jp/portfolio/javascript/yuga.htmlからダウンロードしたyuga.jsのセットを使っています。 jsファイルを変更するには、特別な環境を用意しなければいけないのでしょうか?DreamWeaver CS3では、書き換えはできませんか?また、yuga.jsのセットが元の記述と違っているのなら、日本語でナビゲーション部分を書き換えるのは不可能なのでしょうか?回答をお願いいたします。

  • Ajaxで加工したページの初期化について

    ページ上にテキストボックスやセレクトボックスがたくさんあります。 セレクトボックスAで選択した値に基づいて、セレクトボックスBやテキストボックスに一つの値を表示しています(セレクトボックスは選択不可状態になる)。 セレクトボックスAで選択しないときは、セレクトボックスBには予め選択肢が入っています。 セレクトボックスAで選択して、セレクトボックスBにデータを表示した後、 リセットボタンを押したらセレクトボックスBは初期状態の予め選択肢が入っている状態に戻したいです。 そして、セレクトボックスCには、別の選択肢を入れ直したいです。 このようなセレクトボックス、テキストボックスともに何十個もあるので、出来たら一括で初期状態に戻し、その後、セレクトボックスの選択肢の変更などのAjax加工をしたいと思っています。 ページのツールバーのページ更新ボタンを押すと、ページがリロードされて、初期化されるので、 window.location.reload(); と設定した後、さらにAjaxでセレクトボックスなどの変更をするプログラムを組んだのですが、 window.location.reload(); この後の処理が動いてくれません。 ページをリロードすると、その後の処理が無効?になってしまうのでしょうか。 一つずつセレクトボックスやテキストボックスのデータを削除して、さらに値をセットしてというのが効率が悪い気がして、 ページリロードのように、ページを初期化した後、必要なセレクトボックスやテキストボックスだけAjax処理をしたいなあと思うのですが、どのようにするのがいいのでしょうか。 効率のいいやり方をご存じの方がいらっしゃいましたらぜひ教えてください。 分かりづらいと思いますので、分からない点はご質問頂けたらと思います。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX

専門家に質問してみよう