我有一个隐藏部分的表单,直到提交正确的数据。我想通过jQuery和ajax这样做。我希望如果最后一块进入数据库,我可以在表格上显示下一个元素,目前我的控制器看起来像这样,
function add_career() {
$data = array();
$this->load->model('admin_model');
$this->load->library('form_validation');
if($this->input->post('career_set') == 'Save') {
$this->form_validation->set_rules('career_name', 'Career name', 'required|min_length[3]');
$this->form_validation->set_rules('career_desc', 'Career description', 'required|max_length[3000]');
$this->form_validation->set_rules('useful_info', 'Useful Information', 'max_length[1000]');
$this->form_validation->set_rules('useful_links', 'Useful Links', 'max_length[1000]');
if ($this->form_validation->run() == FALSE) {
$this->template->build('admin/add_career');
} else {
if($this->input->post('degree_needed')) {
$degree_needed = 'Yes';
} else {
$degree_needed = 'No';
}
$this->load->model('careers');
$insertCareer = $this->careers->save(
$this->input->post('career_name'),
$this->input->post('career_desc'),
$degree_needed,
$this->input->post('useful_info'),
$this->input->post('useful_links')
);
$insertCareer['career_id'] = $this->db->insert_id();
//save the data in the session, so we can to it if need be
$this->session->set_userdata(array('career' => $insertCareer));
$this->firephp->log($this->session->userdata);
}
}
$careerData = $this->session->userdata('career');
if($this->input->post('salary_set') == 'Save') {
$this->form_validation->set_rules('basic_salary', 'Basic salary', 'required|max_length[12]');
$this->form_validation->set_rules('trained_salary', 'Fully trained salary', 'required|max_length[12]');
$this->form_validation->set_rules('progressed_salary', 'Progressing onto salary', 'required|max_length[12]');
$this->form_validation->set_rules('average_salary', 'Average salary', 'required|max_length[12]');
if ($this->form_validation->run() == FALSE) {
$this->template->build('admin/add_career');
} else {
$this->load->model('salaries');
$insertSalary = $this->salaries->save(
$this->input->post('basic_salary'),
$this->input->post('trained_salary'),
$this->input->post('progressed_salary'),
$this->input->post('average_salary'),
$careerData['career_id']
);
$this->session->set_userdata(array('salary' => $insertSalary));
$this->firephp->log($this->session->userdata);
}
}
if($this->input->post('course_grades_set') == 'Save') {
//first off we need to save the grade details
$this->load->model('grades');
$this->load->model('course');
$this->firephp->log(count($_POST['grade_desc']));
foreach ($_POST['grade_desc'] as $k => $v) {
$this->firephp->log($v, 'Looped Results');
$insertGrade = $this->grades->save($v, $careerData['career_id']);
// theorertically we should be able to save the assicated course at the same time using $k
$insertCourse = $this->course->save(
$_POST['course_type'][$k],
$_POST['course_names'][$k],
$_POST['course_links'][$k],
$this->db->insert_id()
);
$this->firephp->log($insertGrade, $k);
$this->firephp->log($insertCourse, $k);
}
//$insertGrades = $this->grades->save()
//);
}
$this->template->build('admin/add_career', $data);
}
我基本上需要我的ajax检查最后一个数据是否已提交到数据库ok然后将下一个表单上的display none更改为显示块?这一切都可能吗?在显示表单的下一步之前,如何检查数据是否已成功保存。
答案 0 :(得分:0)
简短的回答:是的,这一切都是可能的。怎么样?
首先是JQuery部分
您可以像使用任何其他(非框架)网站一样使用jQuery。您在$.post()函数中的网址将如下所示。
$.post(
'http://example.com/index.php/controller/function_name",
{key1:value1,key2:value2},
function(data){
//function to execute when return data received from 'function_name' in url
//this is where you would show the next step of the form
},
type of data being returned(html, json)
);
验证部分
我建议你有几个选择。一个是您可以将数据提交给控制器功能,然后使用模型或数据库。然后,您可以检索最后插入的行,看它是否与同一控制器函数中提交的数据匹配。看看这个问题:Select last insert id
答案 1 :(得分:0)
如果你想稍后用jQuery更改它,你不应该在add_career()中返回视图。
如果返回
,则应返回save()函数的结果$this->db->affected_rows() >= 0;
然后你可以检查响应文本并从那里做你想做的......
注意: 我宁愿返回一个XML文件并使用这个方法:
$.ajax({
url: "the/path/to/the/function/",
type: 'POST',
dataType: 'xml',
data: $('#your_form').serialize(),
timeout: 15000,
error: function(){
},
success: function(xml){
//and away we go....
}
});
答案 2 :(得分:0)
可以使用非常简单的解决方案 首先将你的部分划分为div。 当前显示的部分使用隐藏的输入字段将其值设置为1。 将隐藏字段分配给所有div块并将其值设置为0。 将类分配给所有输入字段。 触发ajax并且响应成功时执行此操作 这部分隐藏了当前的div。
$('.class_name').click(function(){
var value = $(this).val();
if(value == 1){
$(this).val() = 0;
$(this).parent().hide();
}else{
$(this).parent().siblings('div').find('input').val() = 1;
}
});