サーバー上にカウンターがあるファイルがあります。 リンクをクリックすると、ファイル内のカウンタをインクリメントするphpファイルにajaxリクエストを送信します。問題は、ファイルが作成されたが、カウンタがインクリメントされていないことです。ファイル内のカウンターがインクリメントされません
ajaxファイルを直接実行すると、カウンタがインクリメントされます。 このエフェクトがなぜ発生するのか分かりますか?
リンク:
<p><a onclick="incCounter('TL1');" href="index.html">Dies ist Testlink1</a></p>
<p><a onclick="incCounter('TL2');" href="index.html">Dies ist Testlink2</a></p>
AJAXリクエスト:
function incCounter(element)
{
xhr = new XMLHttpRequest();
xhr.open("GET","incCounter.php?e="+element,true);
xhr.send();
}
Ajaxのファイル:
$element = $_GET["e"];
//$element = "testdatei";
$filename = "clickcounter\\".$element.".txt";
$counter = 1;
if(file_exists($filename))
{
//counter holen und inkrementieren
$file = fopen($filename,"r");
$counter = fgets($file);
$counter++;
fclose($file);
}
//datei ggfs. leeren und neuen counter schreiben
$file = fopen($filename,"w");
fwrite($file,$counter);
fclose($file)
質問編集: わかりました...これは何? ajaxリクエストにalert("test");
を追加して、リンクをクリックするたびに関数が実行されるようにしました。今それは動作します。カウンターが増分されるたびにリンクをクリックします。しかし今は毎回アラートが表示されます。この行を削除すると、もう動作しません。誰もそれを理解していますか?
リンクをクリックしていて、JavaScriptによるデフォルトの動作(リンクに続く)を妨げていないからです。このアラートは、時間をかけてAjaxの仕事を一時的に許可しません。ハイパーリンクにイベントハンドラを追加し、 'event.preventDefault();'をそれに置く必要があります。 – icecub
たとえば、IDを「..」に追加してから、Javascriptで次のようにします: 'document.getElementById(" link1 ")。addEventListener(" click "、function(event){event.preventDefault();});' – icecub
あ、そう。ありがとうございました。私はそれを知らなかった。私は、デフォルトの振る舞いを妨げることについて考えています。JavaScriptのリンクのhref属性を自分のajaxファイルに渡して、そのページにヘッダ( "Location:...")を付けて転送します。しかし、それが良い練習になるかどうかは本当に分かりません。それを達成するよりスマートな方法はありますか? –