【发布时间】:2017-06-06 22:24:20
【问题描述】:
使用带有选择下拉菜单的表单。当用户选择选项时,它会通过 Ajax 发布到ajax.php。然后该文件返回动态输入字段。 form.php 看起来像这个 before 选项被选中:
<form action="form.php" method="post" id="myform">
<select name="raw_ids_array[]" class="select2" multiple="multiple" id="raw_ids_array"><option></option><option value="1">first</option><option value="2">second</option></select>
<div id="raws_list_hidden"></div>
<input type="submit" id="submit_me" name="submit_me" value="go">
</form>
form.php 看起来像这个选择后选项:
<form action="form.php" method="post" id="myform">
<select name="raw_ids_array[]" class="select2" multiple="multiple" id="raw_ids_array"><option></option><option value="1">first</option><option value="2">second</option></select>
<div id="raws_list_hidden"><input type="text" name="dynamic_field"></div>
<input type="submit" id="submit_me" name="submit_me" value="go">
</form>
我使用此代码进行 Ajax 发布:
<script>
$(function () {
function ajax_post_data(parameters) {
$.ajax({
method: "POST",
url: "ajax.php",
cache: false,
data: parameters,
success: function(data) {
$("#raws_list_hidden").html(data);
}
});
}
$('#raw_ids_array').on("change", function(e) {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
});
</script>
但是,如果表单提交失败,我需要重新显示之前选择的所有选项/输入的值。所以添加了这个:
$(document).ready(function() {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
当form.php 被提交(“重新加载”)时,它会将选定的选项从raw_ids_array[] 发布到ajax.php,然后将动态字段再次添加到raws_list_hidden div 中。唯一不起作用的 - 用户从 dynamic_field 输入的值未序列化;因此,它变成了空的。
我应该如何修改代码,以便动态字段中的值也可以发布到ajax.php?
附:如果我使用代码,我可以序列化所有字段:
$('#submit_me').click(function() {
parameters=$("#myform").serialize();
ajax_post_data(parameters);
});
但它没有用,因为数据在发布form.php之前被序列化了,所以我不知道表单是否会失败(以防提交了一些无效值)。
【问题讨论】:
-
ajax 的重点是它不需要重新加载页面。为什么不让表单也使用ajax提交呢?然后您将能够提供成功/失败信息,并且不会丢失提交的数据,因为它不会重新加载页面。
-
这点很好,但我更喜欢只使用ajax给表单添加动态字段,然后使用标准的HTML/PHP POST提交表单。
标签: javascript jquery ajax