簡単
に言うと、ユーザーがフォームの送信ボタンをクリックすると、条件によってはケース A と呼びます。AJAX 呼び出しを行い、応答を読み取り、応答に基づいて確認ダイアログをユーザーに表示します。次に、ユーザーが [はい] をクリックすると、.submit()
(AJAX 送信ではなく) を使用してフォームを送信します。それ以外のケースをケース B と呼びましょう。フォームの送信を許可します。問題は、ケースAの場合、送信入力パラメータ自体が$_REQUEST
サーバー側のパラメータに存在しないことです。また、 のサーバー側コードにいくつかのチェックがあります$_REQUEST['submitform']
。
これはなぜですか?この質問で、.serialize()
メソッドが送信タイプの入力を設計上シリアル化しないことを確認しました。この状況はあまりにも関連性があり、設計によるものですか? シリーズ化はしていません。
これを修正する適切な方法は何ですか? 注-私の場合、通常のフォーム送信とjqueryフォーム送信の両方が機能する必要があります。
詳細 -
私はこのようなフォームを持っています -
<form class="clearfix" enctype="multipart/form-data" action="/banner/addbanner/-1/2756?name=23 apr adv traffic management test&action=add" method="post" id="frmBanners" name="frmBanners">
<textarea id="comments" rows="3" cols="47" name="data[BannerInfo][comments]"></textarea>
<input type="text" id="description" maxlength="255" size="50" value="" name="data[BannerInfo][description]">
<input type="submit" class="stdButton save" value="Submit" name="submitform" id="submitform">
</form>
そしていくつかのjavascript -
$("input#submitform").click(preValidateUrls);
function preValidateUrls()
{
if(Case A, a particular condition and URLs are not empty)
{//Ajax call to validate some URLs
$.ajax({ ...
success: function(res)
{
if(validation fails)
{
if(confirm(msg))
{ //Display a javascript confirm dialogue, if user still wants to continue
$("form#frmBanners").submit();
}
}
}
}); //end of $.ajax
return false; //do not allow form to get submitted before ajax response has not been received.
}
else
{//case B, let the form submit normally
return true;
}
}
サーバー側のコードで -
if(isset($_REQUEST['submitform']) && $_REQUEST['submitform']=='Submit')
{
//form submission detection - does not work in case A.
}
問題は、jquery を使用してフォーム送信が行われた場合、フォーム送信検出が機能しないことです。つまり、パラメータ「submitform」が $_REQUEST に存在しません。