簡而言之 - 當用戶點擊表單的提交按鈕時,根據某些條件,我們稱之爲情況A,一些AJAX調用,讀取響應並基於響應,向用戶顯示確認對話,然後當用戶點擊是時,我使用.submit()
(而不是AJAX提交)提交表單。在另一種情況下,我們稱之爲情況B,我允許表單提交。問題是,在情況A中,服務器端的參數$_REQUEST
中不存在提交輸入參數本身。我們在服務器端代碼$_REQUEST['submitform']
上有一些檢查。當使用jquery提交表單時,修正輸入類型提交參數時不適用的正確方法
這是爲什麼呢?我檢查了this question,.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中。