Javascript Codeigniter表单验证通过值而不是字段名
我使用的是Codeigniter,我有一个动态创建的表单,有很多输入字段。我使用jQuery和AJAX提交表单,并将表单中的所有数据作为对象传递。这是我的jQuery代码:Javascript Codeigniter表单验证通过值而不是字段名,javascript,jquery,forms,codeigniter,Javascript,Jquery,Forms,Codeigniter,我使用的是Codeigniter,我有一个动态创建的表单,有很多输入字段。我使用jQuery和AJAX提交表单,并将表单中的所有数据作为对象传递。这是我的jQuery代码: $('body').on("submit", "#app-options-form", function(evnt){ // Show loader while AJAX is loading $('.response-container').html('<img class="response-loa
$('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");
});
这些是我试图设置规则的尝试,但没有一个有效我还没有测试过,但应该有效
$("body").on("submit", "#app-options-form", function() {
// Prevent form submission
evnt.preventDefault();
// Show loader while AJAX is loading
$('.response-container').html('<img class="response-loader" src="<?php echo base_url();?>/img/loader.gif" >');
var form = $(this).serializeArray();
var data = {data: form};
$.post("<?php echo site_url('admin/ajax_app_options'); ?>", data, function(response) {
$('.response-container').html(response.result);
}, "json");
});
代码无法工作的原因是,Form_验证将在$_POST数组中查找键,但它需要在$_POST['data']中查找
另一个毫无意义的选项是,使用数据数组如下所示:
$data = $this->input->post('data');
foreach ($data as $key => $value) {
$this->form_validation->set_rules("data[$key]", 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
但我不能说这肯定会奏效。我不知道您的问题是否来自javascript方面,但无论如何,请尝试发送整个表单,而不是像以下var data=$'app-options-form'。序列化;谢谢你的回答。我明白你想说什么,但这不是一个选择。我必须以对象或数组的形式发送所有这些信息。输入字段的名称是动态生成的,所以我需要将它们放在一个数组中。一旦我在PHP中收到这些数据,我不知道我有哪些输入字段,所以我必须用foreach循环这个数组。谢谢你的回答,但我想你没有明白这里的问题是什么。如果我有一个字段,例如name=username,通过序列化,它将作为$\u POST['username']发送。但是我需要它在一个数组中,比如$u POST['data']['username']。我的Javascript代码还可以,它的工作原理与预期的一样。但我的问题更多的是如何将这些数据传递到codeigniter的验证表单。我想绕过它的set_rules函数来提供值而不是字段名。我想绕过它的set_rules函数来提供值而不是字段名是什么意思?为什么?我的英语不好,所以我不知道如何表达自己。所以,我有很多输入,它们是按平日制创建的。他们的名字也是以正统的方式产生的。所以在PHP中,我不知道需要处理多少字段以及它们的名称属性,所以我必须将其放入数组中,才能循环遍历所有字段。例如,如果我有3个领域,我的名字属性是:1-3-1,2-5-3,3-5-4。如果我以$u POST['1-3-1']=某个值等形式发送它们,我将如何在PHP中获取它们?我不知道这个名字1-3-1。所以我必须以数组的形式发送它,比如$u POST['data']['1-3-1']=一些值……我用我的PHP代码更新了我的原始问题,请看一看。谢谢,我不知道我可以用foreach和$this->input->POST一起使用。我会试试这个,它应该有用。
foreach ($this->input->post() as $key => $value) {
$this->form_validation->set_rules($key, 'Vrijednost', 'trim|xss_clean|max_length[5]');
}
$data = $this->input->post('data');
foreach ($data as $key => $value) {
$this->form_validation->set_rules("data[$key]", 'Vrijednost', 'trim|xss_clean|max_length[5]');
}