0

简而言之 - 当用户单击表单的提交按钮时,根据某些条件,我们将其称为案例 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&amp;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”。

4

1 回答 1

0

作为一种快速简便的修复方法,您可以手动将“&submitform=submit”附加到 .serialize() 输出。这应该够了吧。

于 2012-05-04T14:00:27.017 回答