JavaScriptと非同期通信を使って、
リンククリックのアクセスカウンターを作ろうとしていますが、うまくいきません。

JavaScriptは、

function createHttpRequest(){

//Win ie用
if(window.ActiveXObject){
try {
//MSXML2以降用
return new ActiveXObject("Msxml2.XMLHTTP")
} catch (e) {
try {
//旧MSXML用
return new ActiveXObject("Microsoft.XMLHTTP")
} catch (e2) {
return null
}
}
} else if(window.XMLHttpRequest){
//Win ie以外のXMLHttpRequestオブジェクト実装ブラウザ用
return new XMLHttpRequest()
} else {
return null
}
}
function upcount(pr)
{
//XMLHttpRequestオブジェクト生成
var httpoj = createHttpRequest() //[1]
var url = './count.php?prid='+pr;

// alert(url);
//open メソッド
httpoj.open( 'GET' , url , true) //[2]

//受信時に起動するイベント
httpoj.onreadystatechange = function() //[4]
{
}

//send メソッド
httpoj.send('') //[3]
}

です。

HTMLは、PHPの一部なのですが、

$prdata[$prcount]= "<li><a href=\"$link\" onClick=\"upcount('$prid');\">$title</a></li>\n";

な風になっています。

ブラウザは今のところFirefoxを使っています。

ここで奇妙なことが起こっています。

upcountファンクションのalertのところを一回でもコメントアウトでなくして、
リンクをクリックすると、うまくカウントされるのです。
コメントアウトにしても、うまくカウントされ続けます。

しかしコメントアウトのままですと、別のPCのFirefoxでリンクをクリックしても、
カウントされませんでした。

奇妙な現象も解明したい気もしますが、まずはソースにミスがあると
思っていますので、どうかデバッグにご協力ください。

よろしくお願いいたします。

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

A 回答 (2件)

#1です。



とうやら杞憂だったようです。

>別のPCのFirefoxでリンクをクリックしても、カウントされませんでした。
そちらのPCでスクリプトがオフになっているとかの可能性は?

あとは…、 あまり思いつきません。

この回答への補足

PHPのリダイレクトを使えばいいことに気づきました。

alertを実行したPCだけうまくいくのは、何かキャッシュが残っているからかも

しれませんね。

みなさんありがとうございました。

補足日時:2011/04/12 09:09
    • good
    • 0

サーバー側でどのような処理をしているのか不明ですが、ひょっとして$pridにカウントの数がはいっていたりしませんか?


受け取った後の処理にもよりますが、function upcount(pr)でprを送っていますけれど、その内容をそのままカウントするのに使用していたりしませんか?
(prの内容はなんだかわからないけれど)

>upcountファンクションのalertのところを一回でもコメントアウトでなくして、
>リンクをクリックすると、うまくカウントされるのです。
alertは関係無いと思いますが、コメントアウトしないとカウントされないのでしょうか?
そうは思えません。

>しかしコメントアウトのままですと、別のPCのFirefoxでリンクをクリックしても、
>カウントされませんでした。
コメントアウトをはずせば、うまくカウントされるということでしょうか?
そうは思えません。


サーバ側でどのような処理をしているのでしょうか?
1)クライアントA、Bに同じソースを送信。
2)クライアントAがクリック
3)Bがクリック
でちゃんとカウントできるような処理になっていますか?

もう少し複雑にして
1)クライアントA、Bにソースを送信
2)Aがクリック
3)クライアントCにソースを送信
4)Cがクリック
5)Bがクリック
でも大丈夫ですか?

要は、『順序やタイミングに関わらず正しく処理できるようになっているでしょうか』という意味ですが…

この回答への補足

見てくださってありがとうございます。

prにはリンクをどのリンクがクリックされたかを識別するための識別番号が入っています。

少し変な使い方かもしれませんが、
count.php?prid=1
のようにしてクライアントからサーバーにデータを送信しています。

count.phpではMySQLのクエリを使ってデータベースをロックした状態で、
カウントアップしています。

補足日時:2011/04/08 11:20
    • good
    • 0

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

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


人気Q&Aランキング