テキストボックスと送信ボタンを備えた非常に基本的なフォームがあります。このフォームは、電子メールを受け取り、それを ajax リクエストを介して処理するために PHP ページに送信することになっています。ただし、フォームは実際には送信されません。代わりに、onSubmit イベントを使用して関数を呼び出し、電子メールの形式が有効な場合に Ajax 要求が行われます。ただし、(ログを介して) PHP ページに対して複数の要求が行われていることがわかりますが、その理由については困惑しています。私がチェック/試したいくつかの潜在的な原因は次のとおりです。
- 複数回呼び出された post_email() 関数 - onSubmit イベント以外では呼び出していません
- ユーザーが複数回クリックする - 可能かもしれませんが、一部の Ajax 呼び出しは互いに 10 分の 1 秒以内です。PHPページですべてのリクエストをログに記録しているため、これを確認しています
- 複数のバージョンの jQuery がサイト内に読み込まれています (レガシー コード)。私の考えでは、ロードされたバージョンごとに .ajax 呼び出しが行われていました。ただし、すべての ajax 呼び出しに jQuery.fn.jquery データ文字列を追加し、このページでは 1 つのバージョンのみを使用しています。
私が使用しているコードは次のとおりです。
HTMLコード
<form id="post_em" name="post_em" method="post" onSubmit="return post_email()">
<h3>enter e-mail:</h3>
<input type="text" id="email" name="email" />
<input type="submit" value="submit" />
<div id="em_response"></div>
</form>
JS コード
function post_email() {
if(isValidEmailAddress(jQuery("#email").val()))
{
var optincurlurl = "opt_in.php";
var dataString = jQuery("#post_em").serialize();
jQuery.ajax({
url: optincurlurl,
type: 'POST',
data: dataString+"&jQuery="+jQuery.fn.jquery,
datatype: "text",
timeout: 3600,
error: function(){
jQuery("#em_response").html("Error.");
jQuery("#em_response").show();
},
success: function(data){
jQuery("#em_response").html(data);
jQuery("#em_response").show();
}
});
} else
alert("invalid email.");
return false;
}
Ajax 呼び出しが複数回行われている理由について、考えられる理由を見つけたらお知らせください。
ありがとう。