0

我想使用 jQuery.post 发布一个表单:

JS函数:

function post_ajax_form2(url,formId,message){   
  bsendMessage = 0; 
  if (typeof message !== 'undefined') { bsendMessage =  1;} 
  var data = jQuery('#'+formId).serialize();    
  alert(data);
  jQuery.post(url,data);    
  if (bsendMessage == 1) { alert(message); }
} 

表单使用单个 jQuery.load 在 AJAX 中加载。

加载的 HTML 表单:

<form action="index.cfm" method="get" id="fdesc_preview">
   <input type="hidden" name="change_preview" value="1">
   <input type="checkbox" id="cbpreview" name="PREVIEW" class="preview" value="1" onclick="post_ajax_form2('myUrl.html','fdesc_preview');" <cfif attributes.preview> checked</cfif>></td>
   <td>Show short descriptions&nbsp;</td>
</form>

当我单击复选框时,表单已发布,但数据为空。单个 HTML 页面上的相同代码可以工作。

我错过了什么?

感谢您的回复。

4

2 回答 2

0

使用这种形式的帖子:

jQuery.post(url,data);    
if (bsendMessage == 1) { alert(message); }

IF 条件语句立即执行,而不是等待帖子返回 - 帖子是异步的,并且需要在帖子的回调函数中具有该 if 条件。

变更示例:

jQuery.post(url,data).done(function(message) {
    alert(message); }
});
于 2013-05-21T21:37:26.443 回答
0

我终于找到了空序列化的解决方案(和原因):

该表单位于<table><tr><td>... 中,并且<form>不允许将元素作为 . 的子元素<table>

浏览器通过将它移到表外并在它开始后关闭它来纠正错误</form>,这意味着元素不再在它里面:序列化的数据是空的!

我的源代码:

<table cellspacing="0" cellpadding="4" border="0" align="left">
  <tr>
    <form action="index.cfm" method="post" id="fdesc_exp_view" name="fdesc_exp_view">
      <td width="16">
        ......
        <input type="checkbox" id="cbexpanded_view" name="expanded_view" class="expanded_view" value="1" onchange="post_ajax_form('myUrl','fdesc_exp_view','thanks 2');"<cfif attributes.expanded_view> checked</cfif>>
      </td>
       <td>Show expanded view&nbsp;</td>
     </form>
   </tr>

浏览器输出源代码:

<table cellspacing="0" cellpadding="4" border="0" align="left">
<tbody>
  <tr valign="middle">
    <form id="fdesc_exp_view" name="fdesc_exp_view" method="post" action="index.cfm"></form>  
    <td width="16">
      .......
      <input id="cbexpanded_view" class="expanded_view" type="checkbox" onchange="post_ajax_form('myUrl','fdesc_exp_view','thanks 2');" value="1" name="expanded_view">
    </td>
    <td>Show expanded view </td>
</tr>
</tbody>
</table>

如果页面未在 AJAX 中加载,则相同的代码可以工作,为了确保它始终工作,我只需将表单放在表格之外,现在在我的帖子中有数据。

非常感谢您的帮助。

于 2013-05-22T13:06:03.720 回答