我想使用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 </td>
</form>
当我点击复选框时,表单已发布,但数据为空。 单个HTML页面上的相同代码可用。
我错过了什么?
感谢您的回复。
答案 0 :(得分:0)
使用这种形式的帖子:
jQuery.post(url,data);
if (bsendMessage == 1) { alert(message); }
IF条件语句立即执行,不等待帖子返回 - 帖子是异步的,需要在帖子的回调函数中有条件。
变更示例:
jQuery.post(url,data).done(function(message) {
alert(message); }
});
答案 1 :(得分: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 </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中加载,相同的代码也能正常工作,以确保它始终有效我只需将表单放在表格之外,现在我的帖子中就有数据。
非常感谢你的帮助。