3

この質問はすでに行われている可能性がありますが、残念ながら、満足のいく答えは見つかりませんでした。具体的なケースを尋ね、管理者に少なくとも数日間は質問を削除しないように依頼して、試してみることができます...

ページがあります。キャプチャを使用します。そのようです:

<?php
session_start(); // the captcha saves the md5 into the session
?>
<img src="captcha.php" onclick="this.src = this.src" />

それが私の最初のコードでした。ソースが同じである場合、ブラウザが画像をリロードすることは役に立たないと考えたため、機能しませんでした。私の現在の解決策は、getパラメーターを渡すことです。

onclick="this.src = 'captcha.php?randomNumber='+ranNum"

JavaScript変数は、イベントvar ranNumが発生するたびにランダムに生成されます。onclickそれでも問題なく動作しますが、2つの数値が2回続けて同じである場合、可能性は低いですが、可能性はありません。乱数は-50,000から50,000の間で変化しますが、私はまだそれが好きではありません。そして、私はその方法が正しいとは思いません。AJAXを使った「より正しい」方法を知りたいのですが。私はそれが可能であることを知っています。どうすればいいのかご存知だと思います^^その場合は見せてください。

前もって感謝します!

ちなみに、cap(t)chaのスペルを変えても、気にしないでください。PHPファイルへの参照は私のコードに含まれています。randomImage.phpを使用しています。

編集:JavaScriptの乱数は生成されるだけなので、画像が再読み込みされます。Captcha.phpは$_GETパラメーターを気にしません。文字列は実際にはランダムです。

編集:したがって、私が知りたいのは、イベントが発生するたびに異なるgetパラメーターを渡さずにブラウザーに画像をリロードさせる方法です。

4

4 に答える 4

5

残念ながら、AJAXは画像を動的にロードするための良い方法を提供していません。javascriptの「プリロード」トリックを使用しても、ブラウザはURLごとに1回ずつ各画像をロードします。ブラウザに同じソースから別の画像をロードさせる唯一の良い方法は、現在行っているのと同じように別のパラメータを使用することです。そして、他の回答が述べているように、タイムスタンプはそのために十分なはずです。

于 2010-05-15T21:29:53.330 に答える
3

代わりにタイムスタンプを使用することを検討しましたか?

onclick="this.src='captcha.php?ts='+Math.round(new Date().getTime()/1000)"
于 2010-05-15T21:15:31.017 に答える
1

使用するだけです:

<img src="captcha.php" onclick='this.src = "captcha.php&time=" + new Date().getTime();' />

時間パラメーターを破棄して、PHPで乱数を生成できます。:)

于 2010-05-15T21:16:13.410 に答える
0

また、base64でエンコードされたAjaxリクエストから画像を取得し、それをimgタグに入れることもできます。

もちろん、それはやり過ぎだと思います。base64でエンコードされたファイルは元のサイズの約4/3です。(3 kbの画像はbase64で約4kbになります)。

編集:次のようなimgsrc属性を持つ

data:image / png; base64、base64encodedimage

于 2016-05-31T13:54:21.953 に答える