「夫を成功」へ導く妻の秘訣 座談会

ある場所に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;
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

PHP 側でキャッシュ対策しているとのことですが、私が使用しているコードを示します。



// 日付が過去
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
// 常に修正されている
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
// HTTP/1.1
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
// HTTP/1.0
header("Pragma: no-cache");

上記コードを持った PHP プログラムに対して IE6 から XmlHttpRequest でリクエストを行った場合に常に最新の情報を取得できています。
この場合、必須なのは Expires ヘッダになります。他は主に Proxy 対策として働きます。

参考URL:http://jp2.php.net/header

この回答への補足

自己解決レスです。

If-Modified-Since を入れたところ、毎回WEBを見るようになりました。

xmlhttp.onreadystatechange = setPageData;
xmlhttp.open('GET', pageURL, true);
xmlhttp.setRequestHeader("If-Modified-Since", "Thu, 01 Jun 1970 00:00:00 GMT");
xmlhttp.send(null);

参考URL:
http://www.semblog.org/msano/archives/000386.html

回答を頂いた方、貴重なお時間を割いていただきましてありがとうございました。

補足日時:2006/01/27 16:58
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

私の入れているコードは以下のとおりです。

header("Content-Type: text/html; charset=EUC-JP");
header("Expires: Thu, 01 Dec 1994 16:00:00 GMT");
header("Last-Modified: ". gmdate("D, d M Y H:i:s"). " GMT");
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

これでダメでした。

お礼日時:2006/01/27 16:57

環境がないので憶測ですが、


たとえばリクエストのURLをブラウザで直接入力してみたらどうですか?
キャッシュされてませんか?
そうだとすれば、リクエストがキャッシュされないようにphpを改造するしかないですね。
キャッシュさせない方法は、ネットで探せるのでご自分でお調べ下さい。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

キャッシュを保存しないような設定はPHPの呼び出し側で入れています。
ブラウザで直接URLを開いたところ、ちゃんと内容は更新されていました。
もちろん更新さえされていればonMouseoverで見ても情報は更新されますが、ユーザーに一々このような作業を強いるわけには行きませんので、違う方法はありませんでしょうか。

お礼日時:2006/01/27 10:34

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QXMLHttpRequestでウェブページ取得

エクセルVBAで、XMLHttpRequestを利用してウェブページからデータを得ようとしています。
具体的には、10分おきに更新されている積雪データの取得を試みるため、以下のようなプログラムを書きました。

Sub get_SMTR()

Worksheets("Data").Activate

Dim Request As Object

On Error Resume Next
Set Request = CreateObject("MSXML2.XMLHTTP")
If (Err.Number <> 0) Then
Set Request = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If Request Is Nothing Then
MsgBox "XMLHTTP オブジェクトを作成できませんでした。" _
, vbCritical
Exit Sub
End If

Dim l As Integer
Dim Nagano_URL As String
Dim Nagano_ID As Variant
Nagano_ID = Array("001", "002", "003", "004", "005", "006", "007", "008", "009", "010", "026", "027", "028", "029", "030")

For l = 0 To UBound(Nagano_ID)
Nagano_URL = "http://www.avis.ne.jp/cgi-usr/chouken_npweatherinfo.cgi?id=" + Nagano_ID(l)
Request.Open "GET", Nagano_URL, False
Request.send

Dim Nagano_Text As String
Dim Nagano_Array() As String
' はじめに、データの観測時刻を取得する
Nagano_Text = StrConv(Request.ResponseBody, 64)
Nagano_Array = Split(Nagano_Text, """font-size:12px""")
Nagano_Text = Nagano_Array(1)
Nagano_Array = Split(Nagano_Text, "</td>")
Nagano_Text = Nagano_Array(0)
Nagano_Text = Replace(Nagano_Text, ">", "")
Cells(41 + l, 2) = Nagano_Text
' そのあと、積雪データを取得する
Nagano_Text = StrConv(Request.ResponseBody, vbUnicode)
Nagano_Array = Split(Nagano_Text, "83")
Nagano_Text = Nagano_Array(7)
Nagano_Array = Split(Nagano_Text, "18")
Nagano_Text = Nagano_Array(2)
Nagano_Array = Split(Nagano_Text, "</td>")
Nagano_Text = Nagano_Array(0)
Nagano_Text = Replace(Nagano_Text, """>", "")
Cells(41 + l, 3) = Nagano_Text
Next l

Set Request = Nothing

' Application.OnTime Now + TimeValue("00:10:00"), "get_SMTR"
' ActiveWorkbook.Save

End Sub

これを実行すると、ワークシートを開いた直後だと最新の情報が取得できたのですが、10分おきに再取得しても新しいデータが取得できませんでした(19時35分に実行すると19時30分のデータが取得できるが、10分後の45分に再実行しても相変わらず19時30分のデータのまま)。元のウェブページではデータが更新されているのを確認しても、VBAの実行で取得したものは以前のまま変わりません。
何か原因があるかと思うのですが、お気づきの方がおられましたらご指摘お願いします。

エクセルVBAで、XMLHttpRequestを利用してウェブページからデータを得ようとしています。
具体的には、10分おきに更新されている積雪データの取得を試みるため、以下のようなプログラムを書きました。

Sub get_SMTR()

Worksheets("Data").Activate

Dim Request As Object

On Error Resume Next
Set Request = CreateObject("MSXML2.XMLHTTP")
If (Err.Number <> 0) Then
Set Request = CreateObject("MSXML.XMLHTTPRequest")
End If
On Error GoTo 0
If Requ...続きを読む

Aベストアンサー

たしか、ローカルにキャッシュが保存されているとそれを見に行くからだと思って
検索してみたら http://oshiete.goo.ne.jp/qa/1923037.html がヒットしました。
お試しください。

QAjaxが動きません~『status=0』?

Ajaxを使うため、
web上のサンプルをとってきて実行してみたところ、動きません。

いろいろ調べてみたところ、
通常
 if(httpObj.status == 200)
などで使われるstatusが0になっていることが分かりました。

どこかで
 『ローカル上ではstatusは0になる』
という記述を見たのですが、Apache2.0.59が入っています。

Apacheが入っていてもstatusは0になるのでしょうか?

今回使用したサンプルは以下のサイトをのモノを貼り付けました。
http://www.openspc2.org/JavaScript/Ajax/Ajax_study/chapter02/004/index.html
その上で、
  if ((httpObj.readyState == 4) && (httpObj.status == 200))
  {
    displayData();
  } else {
    document.ajaxForm.result.value = httpObj.status;
  }
としました。


これで2日悩んでいるので、解決したいのです。
よろしくお願いいたします。

Ajaxを使うため、
web上のサンプルをとってきて実行してみたところ、動きません。

いろいろ調べてみたところ、
通常
 if(httpObj.status == 200)
などで使われるstatusが0になっていることが分かりました。

どこかで
 『ローカル上ではstatusは0になる』
という記述を見たのですが、Apache2.0.59が入っています。

Apacheが入っていてもstatusは0になるのでしょうか?

今回使用したサンプルは以下のサイトをのモノを貼り付けました。
http://www.openspc2.org/JavaScript/Ajax/Ajax_study/c...続きを読む

Aベストアンサー

> error.logにしか書き込みがないという時点で失敗なのがよく分かりました。
Apacheの起動に失敗してるのでは?

まさかとは思いますが、Apacheをインストールしただけで動いてないとか、使ってないとか、
そういうことはないですよね?
アクセスするアドレスってどうなってます?
ちゃんとhttp://localhost/~ または http://127.0.0.1/~としてますか?

> 『ローカル上ではstatusは0になる』
語弊のある書き方ですが、ウェブサーバーを使わずにファイルを読み込んだ場合、
つまり、file:///~のようなアドレスになる場合にstatusを受け取れません。
ローカルでもウェブサーバーを使っていればstatusコードを受け取れます。

蛇足になりますが
statusを見るだけだったらContent-typeは関係ないですよ。
ファイルが有れば200、エラーならそのエラーコードが入ります。
404 FileNotFoundとかのHTTP Status codeと同じですので。

>   if ((httpObj.readyState == 4) && (httpObj.status == 200))
>   {
>     displayData();
>   } else {
>     document.ajaxForm.result.value = httpObj.status;
>   }
この書き方では、else文はたぶん意味はないと思います。

readyStateの変遷を見るためなら

document.ajaxForm.result.value += httpObj.readyState + ', '+ httpObj.status + '\n';

、、、を、if文の前に書いた方がいいと思います。(たぶん動くと思うので)

> error.logにしか書き込みがないという時点で失敗なのがよく分かりました。
Apacheの起動に失敗してるのでは?

まさかとは思いますが、Apacheをインストールしただけで動いてないとか、使ってないとか、
そういうことはないですよね?
アクセスするアドレスってどうなってます?
ちゃんとhttp://localhost/~ または http://127.0.0.1/~としてますか?

> 『ローカル上ではstatusは0になる』
語弊のある書き方ですが、ウェブサーバーを使わずにファイルを読み込んだ場合、
つまり、file:///~のよ...続きを読む

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QVBAでEUC-JPのHTMLソースを取得しShift-JISにしたい

こんにちは。
現在
1.Msxmlで任意のHTMLソースを取得
(ただこれがEUCで、エクセル上だと文字化けする)
2.それをShift-JISにエンコードして、のちのちExcel表にする)
というコードをExcelVBAで描いています。

ソースの取得はできるのですが、
EUCのサイトのため漢字が文字化けします。
エンコードしようと思ってもできません。
ADODB.Streamというものを使おうとしています。

宜しくお願い致します。

Dim xmlHttp

Set xmlHttp = CreateObject("Msxml2.XMLHTTP")

xmlHttp.Open "GET", url, False
xmlHttp.send


Set in_strm = CreateObject("ADODB.Stream")
Set out_strm = CreateObject("ADODB.Stream")

in_strm.Charset = "EUC-JP"
in_strm.Type = adTypeText

out_strm.Charset = "Shift_JIS"
out_strm.Type = adTypeText

in_strm.Open
out_strm.Open

m_byte1 = xmlHttp.responseText
in_strm.WriteText m_byte1
in_strm.Position = 0

in_strm.CopyTo out_strm

out_strm.Position = 0

m_string2 = out_strm.ReadText(adReadAll)

MsgBox m_string2 'ここで正しいものが表示される予定・・・

in_strm.Close
out_strm.Close

Set in_strm = Nothing
Set out_strm = Nothing

こんにちは。
現在
1.Msxmlで任意のHTMLソースを取得
(ただこれがEUCで、エクセル上だと文字化けする)
2.それをShift-JISにエンコードして、のちのちExcel表にする)
というコードをExcelVBAで描いています。

ソースの取得はできるのですが、
EUCのサイトのため漢字が文字化けします。
エンコードしようと思ってもできません。
ADODB.Streamというものを使おうとしています。

宜しくお願い致します。

Dim xmlHttp

Set xmlHttp = CreateObject("Msxml2.XMLHTTP")

xmlHttp...続きを読む

Aベストアンサー

文字化けしなければ良いですか?

Sub test1()
Dim xmlHttp
Dim URL As String
Dim in_strm
Dim m_string2

URL = "http://www.mapfan.com/"
Set xmlHttp = CreateObject("Msxml2.XMLHTTP")

xmlHttp.Open "GET", URL, False
xmlHttp.send

Set in_strm = CreateObject("ADODB.Stream")
in_strm.Open
in_strm.Position = 0
in_strm.Type = 1 'adTypeBinary
in_strm.Write xmlHttp.responseBody

in_strm.Position = 0
in_strm.Type = 2 'adTypeText
in_strm.Charset = "EUC-JP"
'in_strm.Charset = "_autodetect" '自動判別でも可

m_string2 = in_strm.ReadText
MsgBox m_string2

in_strm.Close
Set in_strm = Nothing
End Sub

文字化けしなければ良いですか?

Sub test1()
Dim xmlHttp
Dim URL As String
Dim in_strm
Dim m_string2

URL = "http://www.mapfan.com/"
Set xmlHttp = CreateObject("Msxml2.XMLHTTP")

xmlHttp.Open "GET", URL, False
xmlHttp.send

Set in_strm = CreateObject("ADODB.Stream")
in_strm.Open
in_strm.Position = 0
in_strm.Type = 1 'adTypeBinary
in_strm.Write xmlHttp.responseBody

in_strm.Positio...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QVBAからキャッシュを削除する方法について

VBAからVBを起動させて下記のキャッシュの削除をさせたいのですが
よくわかりません。申し訳ありませんが教えて下さい。

Process.Start("RunDll32", "InetCpl.cpl,ClearMyTracksByProcess 4351")

Aベストアンサー

「InetCpl.cpl,ClearMyTracksByProcess」でWeb検索したところたくさん出てきました。
ほとんどがRundll32.exeを使っていました。

VBAなら
Shell "RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 4351"
とすればよさそうです。

http://blogs.yahoo.co.jp/tksoft/59146667.html
http://www.business-spreadsheets.com/forum.asp?t=582

(質問者様が提示されたコードを含むVBプログラムがすでに動作することがわかっているなら、それをコンパイルして実行形式ファイルを作り、それを上記のようにShell関数を使って起動すれば、文字通りVBAからVBを起動することになります。でも質問者様はそういう回答をお望みではないですよね。)

参考URL:http://www.business-spreadsheets.com/forum.asp?t=582

Q別のシートから値を取得するとき

Worksheets("シート名").Activate
上記のを行ってから別シートの値を取得するのですが、
この処理を行うと指定したシートへ強制的にとんでしまいます。。。

※イメージ
For ~ To ~
  Worksheets("シートA").Activate
  シートAの値取得
       :
  Worksheets("シートB").Activate
  シートBの値取得
Next

このイメージ処理を行うとものすごい勢いで画面がチカチカします。。。
シートを変えずに他のシートから値を取得する方法はないのでしょうか。
教えてください!

Aベストアンサー

Worksheets("シートA").Range("A1")

みたいな感じでできませんか?

Qエクセル キャッシュメモリーの解放

エクセルで シュミレーションをしています。
パラメータは 10個 パラメーター変化数 5
5*5*---10乗 の計算
秒で 20個ほど パラメーターは進む? で まあ 1週間も有れば・・・・
所が、1日めで ハングでもない、とにかく 止まるというか
パラメータ全く動かず。
VBの実行の 中断、実行でも 動かず。
保存して

タスクマネージャーの メモリーを見ると

ハング状態          :リセットした状態のメモリー
合計     4002       : 4002
キャッシュ 2200(曖昧)   : 416 
利用可能 2000(曖昧)    : 2435
空メモリー 200(正確)    : 2461  

空メモリーが 200 と 少ない。
これが原因だろうと 思うのですが。

キャッシュを開放する方法って 有るのでしょうか

ループの中で
DIM set など 一切 ありません。
セルに値を代入。クリヤーせずに 全て上書き
自動計算 ON
相関係数算出などは 有りますが

キャッシュが 原因か それなら解放は?
それ以外の原因は?

何かご教示願えれば幸いです。
  

エクセルで シュミレーションをしています。
パラメータは 10個 パラメーター変化数 5
5*5*---10乗 の計算
秒で 20個ほど パラメーターは進む? で まあ 1週間も有れば・・・・
所が、1日めで ハングでもない、とにかく 止まるというか
パラメータ全く動かず。
VBの実行の 中断、実行でも 動かず。
保存して

タスクマネージャーの メモリーを見ると

ハング状態          :リセットした状態のメモリー
合計     4002       : 4002
キャッシュ 2200(曖昧)   ...続きを読む

Aベストアンサー

No1です。

おそらく勘違いをなさっていると思いますが、
「空きメモリー」=「電気だけ食って何の役にも立っていないメモリー」
です。
OSしか動いていない状態だと空きはかなりあるでしょうけど、プログラムがそれなりに動いている状態だと、高速化のためには空きメモリーゼロが理想的。とはいえ全くゼロだと急なメモリ使用変動に追いつけないので、空きは要りますが、数百MB空いていれば十分です。

アプリケーションプログラムが使っていないメモリーは余らせておくのは無駄なので、WindowsOSが、キャッシュやバッファに有効利用します。


普通は、必要なメモリサイズ > 物理メモリサイズ なので、足りない分をディスクを使って何とかします。とはいえ、足りなすぎるとメモリアクセスがディスクアクセスばかりになり大変遅くなる。

No1に書いたように、Windows7でOfficeをがんがん使うには4GBはやや不足です。
Excelのコミットサイズはどれだけですか???

QOracle 2つのDate型の値の差を「分」で取得したい

DBはOracleを使用しています。
Date型の項目AとBがあり、それぞれ日時が設定されています。そのAとBの日時の差を「分」で取得したいと思います。
AとBは、1時間以内の場合もあれば、複数日にまたがる場合もあります。
SQLでA-Bで差分は取得できるのですが、その後、どうすれば、「分」に変換できるのかがわかりません。

よろしくお願いします。

例1)
A: 2003/06/18 9:00
B: 2003/06/18 6:00
→3時間→180「分」を返却したい

例2)
A: 2003/06/18 9:00
B: 2003/06/16 9:00
→2日→2880「分」を返却したい

Aベストアンサー

date型は、整数部で日、小数部で時間を管理しています。
なんで、1分 = 1 / 24 * 60 = 1/1440となります。

ということで、
(B - A) * 1440

とすればいいことになります。

QVBAを使い、Web上からファイルをダウンロードしたいのですが・・・

はじめまして。
今、日証金から日々の融資・貸株残高のデータ(CSV)を自動的に
ダウンロードしてExcelに取り込むというマクロを作ろうとして
いるのですが、うまくいきません。


具体的には、

range("A1").value = "http://www.jsf.co.jp/de/stock/dlcsv.php?target=balance&date=" & format(now,"YYYY-MM-DD")
range("A1").select
Selection.Hyperlinks(1).Follow NewWindow:=False, AddHistory:=True

しかし、これだと「ファイルを保存」のWindowがあがってしまうので
処理が途中で止まります。

VBAで、あらかじめ指定したディレクトリに、指定したURLからファイルを自動的にダウンロードする
には、どのようにすればよいのでしょうか?

Aベストアンサー

ちょっと無茶ですね・・・。
APIという機能を使う事になります。
これでVBAの機能を拡張して新たな機能を取り込む事ができるようになります。


http://www.accessclub.jp/bbs5/0009/vba2406.html
http://www.ken3.org/vba/backno/vba120.html


人気Q&Aランキング