• 締切済み

リンククリックのアクセスカウンターがうまくいかない

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でリンクをクリックしても、 カウントされませんでした。 奇妙な現象も解明したい気もしますが、まずはソースにミスがあると 思っていますので、どうかデバッグにご協力ください。 よろしくお願いいたします。

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

#1です。 とうやら杞憂だったようです。 >別のPCのFirefoxでリンクをクリックしても、カウントされませんでした。 そちらのPCでスクリプトがオフになっているとかの可能性は? あとは…、 あまり思いつきません。

yamato-g
質問者

補足

PHPのリダイレクトを使えばいいことに気づきました。 alertを実行したPCだけうまくいくのは、何かキャッシュが残っているからかも しれませんね。 みなさんありがとうございました。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.1

サーバー側でどのような処理をしているのか不明ですが、ひょっとして$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がクリック でも大丈夫ですか? 要は、『順序やタイミングに関わらず正しく処理できるようになっているでしょうか』という意味ですが…

yamato-g
質問者

補足

見てくださってありがとうございます。 prにはリンクをどのリンクがクリックされたかを識別するための識別番号が入っています。 少し変な使い方かもしれませんが、 count.php?prid=1 のようにしてクライアントからサーバーにデータを送信しています。 count.phpではMySQLのクエリを使ってデータベースをロックした状態で、 カウントアップしています。

関連するQ&A