简而言之 -
当用户单击表单的提交按钮时,根据某些条件,我们将其称为案例 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发生表单提交的情况下不起作用,即$_REQUEST中不存在参数“submitform”。