最初我试图从一个控制器加载两个视图。
提交时,我将一个视图传递给一个控制器,另一个视图使用ajax动态传递给另一个控制器。这是控制器的骨架
function edit(){
if (!$this->login_model->is_logged_in())
{
redirect('auth/login', 'refresh');
}
$this->load->library('form_validation');
$this->data['custom_error'] = '';
//------------- Getting Student data----------------
if ($this->form_validation->run('students') == false)
{
$this->data['custom_error'] = (validation_errors() ? '<div class="form_error">'.validation_errors().'</div>' : false);
} else
{
$data = array(
'username' => $this->input->post('username'),
'city' => $this->input->post('city')
);
if ($this->student_model->edit('students',$data,'id',$this->input->post('id')) == TRUE)
{
redirect(base_url().'index.php/students/manage/');
}
else
{
$this->data['custom_error'] = '<div class="form_error"><p>An Error Occured</p></div>';
}
}
$this->data['result'] = $this->codegen_model->get('students','id,username,city,created_on,date_created','id = '.$this->uri->segment(3),NULL,NULL,true);
$this->data['message'] = $this->db->get('messages')->result();
//---------------------- Posting student data for Edit--------------
$this->load->view('pheader');
$this->load->view('/students/students_edit', $this->data);
//-------- loading comment controller for comment box --------------
$msg_data['result'] = $this->db->get('messages')->result();
$this->load->view('commentView', $msg_data);
}
所以问题是当我提交messages_view时控制器都已加载,但我只需要加载一个控制器
这是我的student_edit视图,我在其中编辑我的详细信息
<?php
echo form_open(current_url()); ?>
<?php echo $custom_error; ?>
<?php echo form_hidden('id',$result->id) ?>
<p><label for="username">Username<span class="required">*</span></label>
<input id="username" type="text" name="username" value="<?php echo $result->username ?>" />
<?php echo form_error('username','<div>','</div>'); ?>
</p>
<p><label for="city">City<span class="required">*</span></label>
<input id="city" type="text" name="city" value="<?php echo $result->city ?>" />
<?php echo form_error('city','<div>','</div>'); ?>
</p>
<?php echo form_submit( 'submit', 'Submit'); ?>
</p>
<?php echo form_close(); ?>
以下是我与控制器分开加载的commentView
<div id="content-table-inner">
<table border="0" width="100%" cellpadding="0" cellspacing="0">
<?php foreach ($result as $comment): ?>
<tr valign="top">
<p>Posted By : <?=$comment->created_by?></p>
<p>Posted On : <?=$comment->created->on?></p>
<p>Message : <?=$comment->message?></p>
</tr>
<br/>
<?php endforeach; ?>
</table>
<div class="submitComment" id="insertbeforMe">
<h3>Add a message</h3>
<form id="form" method="POST" action="">
<p>
<textarea name="message"></textarea>
</p>
<input type="hidden" value="<?=base_url()?>" id="baseurl"/>
<button name="submit comment">Submit Comment</button>
</form>
</div>
<script type="text/javascript">
function comment(){
var baseurl = $('#baseurl').val();
$('.submitComment').click(function(){
$.ajax({
url : baseurl + 'index.php/comment/insert',
data : $('form').serialize(),
type: "POST",
success : function(comment){
$(comment).hide().insertBefore('#insertbeforMe').slideDown('slow');
}
})
return false;
})
}
</script>
</div>
谁能告诉我这是什么问题?
答案 0 :(得分:2)
如果我理解正确......
您应该捕获的事件是表单的“提交”,而不是提交按钮的“点击”。您实际上是在运行AJAX请求和提交表单。
尝试这样的事情:
$('form').on('submit', function(e) {
e.preventDefault(); // this prevents the form from submitting
// do AJAX stuff
});
答案 1 :(得分:0)
除非我弄错了,否则您将事件附加到'.submitComment'div上的点击事件。
你不应该给按钮一个id并附上.click事件吗? 然后你需要定义你想通过ajax调用的视图来返回你的函数可以使用的一些json:
Javascript:
$('#button').click(function(){
$.ajax({
url : baseurl + 'index.php/comment/insert',
data : $('form').serialize(),
type: "POST",
dataType: "json",
success : function(comment){
$('table').append('<tr><p>'+comment.createdby+'</p><p>'+comment.createdon+'</p><p>'+comment.message+'</p></tr>');
}
})
return false;
})
Controller方法(注释/插入):
function insert() {
$comment = $this->input->post('message');
$result = $this->commentModel->insert($comment);
if($result["OK"]) {
$data['json'] = json_encode(array('createdon' => $result["createdon"], 'createdby' => $result["createdby"], 'message' => $result["message"]));
$this->load->view('json_comment_view', $data);
}
//ELSE deal with errors (flashdata etc...)
}
视图(通过ajax加载):
<?php
$this->output->set_header('Content-Type: application/json; charset=utf-8');
echo $json;
?>
我没有测试过这段代码 - 或者在大约一年内广泛使用了codeigniter,但所涵盖的概念应该能让您走上正确的道路,实现您想要达到的目标。让我知道!