目标
- 我正在尝试使用 AJAX 将数据(从“页面 A”上的表单)发布到另一个页面(“页面 B”)
- 我希望将“页面 B”中的一些内容加载到指定 div (#result) 内的“页面 A”中。
我试过的
- 我主要基于jQuery
.post()
文档创建了相关的 HTML 和 JS,并受到jQuery AJAX 提交表单的影响。 - 我已经修改了 alert() 以查看该过程在哪里失败。
- 我在 http://jsfiddle.net/jhfrench/QjaTq/ 创建了一个 jsFiddle(后面的 HTML 和 JavaScript 是一样的)
症状
- 页面 A 直接提交到页面 B,就好像表单正常提交并且没有 jQuery 进行调解一样。
理论
- 该
.submit()
方法未附加 - 或者它正在附加,但其中的
preventDefault
指令没有拦截传统的表单提交
HTML
<form action="/echo/html/" id="form_edit_sensitivity" method="post" onsubmit="trimTextFields(this); return checkForm(this);" class="form-horizontal">
<div class="control-group">
<label for="p_sensitivity_type_id" class="control-label">Group</label>
<div class="controls">
<select name="p_sensitivity_type_id" size="1" title="Sensitivity Type" id="p_sensitivity_type_id">
<option value=""></option>
<option value="1">Politician</option>
<option value="2" selected="selected">Celebrity</option>
</select>
</div>
</div>
<div class="control-group">
<label for="p_expiration_dte" class="control-label">Expiration Date</label>
<div class="controls">
<input type="date" name="p_expiration_dte" id="p_expiration_dte" value="" data-datepicker-value="" min="1789-07-29" />
</div>
</div>
<div class="control-group">
<div class="controls">
<label for="p_super_sensitive" class="checkbox">
<input type="checkbox" id="p_super_sensitive" value="Y" name="p_super_sensitive">Feel like checking this box?</label>
</div>
</div>
<div class="form-actions">
<input type="hidden" name="some_value" value="1">
<input type="hidden" name="data" value="<p>Text echoed back to request</p>">
<input type="submit" value="Submit" class="btn btn-primary">
<input type="reset" value="Reset" class="btn">
</div>
</form>
<div id="result">We want to load the results within this div</div>
JavaScript
var trimTextFields = function () {
alert('trim fields');
},
checkForm = function (incoming_form) {
alert('custom validation');
};
/* attach a submit handler to the form */
$('#form_edit_sensitivity').submit(function (event) {
/* stop form from submitting normally */
event.preventDefault();
confirm('we got this far');
/* get some values from elements on the page: */
var $form = $(this),
data = $form.serialize(),
url = $form.attr('action');
/* Send the data using post */
var posting = $.post(url, data);
/* Put the results in a div */
posting.done(function (data) {
var content = $(data).find('#summary');
$('#result').empty().append(content);
});
});
套用“疯狂的联谊会女孩”的不朽名言,我正准备用 C-Punt 我的电脑超过这个。