【发布时间】:2014-09-30 12:43:10
【问题描述】:
我正在使用 Codeigniter,并且我有一个动态创建的表单,其中包含很多输入字段。我正在使用 jQuery 和 AJAX 提交表单,并将表单中的所有数据作为对象传递。这是我的 jQuery 代码:
$('body').on("submit", "#app-options-form", function(evnt){
// Show loader while AJAX is loading
$('.response-container').html('<img class="response-loader" src="<?php echo base_url();?>/img/loader.gif" >');
// Prevent form submission
evnt.preventDefault();
// Get all form inputs
var inputs = $('#app-options-form :input[type="text"]');
// Put them in object as name=>value
var data = {};
for(i=0; i<inputs.length; i++) {
data[inputs[i]["name"]] = inputs[i]["value"];
}
// Generate POST request
$.post("<?php echo site_url("admin/ajax_app_options"); ?>",
{"edit_form_submited" : true, "data" : data},
function (data) {
$('.response-container').html(data.result);
}, "json");
});
我在验证该表单时遇到了困难。如果我将字段名称作为 set_rules() 的参数,它将不起作用,因为它将查找 $_POST['field_name'] 但这不存在。该字段的值作为 $_POST['data']['field_name'] 传递,因为我将所有输入作为名为“data”的对象传递。
那么,有什么方法可以验证这个表单吗?
编辑:
我的 PHP 代码:
// Get received data, here are all the input fields as $field_name=>$field_value
$data = $this->input->post('data');
// Try no. 1 for setting the rules
foreach($data as $key=>$value)
{
$this->form_validation->set_rules($key, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
// Try no. 2 for setting the rules
foreach($data as $key=>$value)
{
$this->form_validation->set_rules($value, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
// Try no. 3 for setting the rules
foreach($data as $key=>$value)
{
$this->form_validation->set_rules($this->input->post('data')['$key'], 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
这些是我设置规则的尝试,但它们都不起作用
【问题讨论】:
-
我不知道您的问题是否来自 javascript 方面,但无论如何尝试发送整个表单而不是像这样 var data = $('#app-options-form' 自己执行 foreach ).serialize();
-
感谢您的回答。我明白你想说什么,但这不是一个选择。我必须将所有这些信息发送到一个对象或数组中。输入字段的名称是动态生成的,所以我需要将它们放在一个数组中。一旦我在 PHP 中收到这些数据,我不知道我有哪些输入字段,所以我必须使用 foreach 遍历这个数组。
标签: javascript jquery forms codeigniter