2013-02-19 7 views
0

Первоначально я пытаюсь загрузить два вида с одного контроллера.Codeigniter - вызов другого контроллера из вида с помощью ajax

При представлении я передаю один вид одному контроллеру, а другой - другому контроллеру, использующему 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

Почему бы вам не изменить ajax вместо вызова контроллера? – ajreal

+0

@ajreal: У меня есть две формы, тогда как я могу представить две разные формы двум различным контроллерам на одной веб-странице? – Neal

+0

два запроса могут быть объединены в один – ajreal

ответ

2

Если я правильно понимаю ...

событие вы должны захватить это формы «отправить», а не нажатием кнопки отправить в «нажмите кнопку». В основном вы выполняете запрос AJAX и, отправив форму.

попробовать что-то вроде этого, вместо:

$('form').on('submit', function(e) { 
    e.preventDefault(); // this prevents the form from submitting 

    // do AJAX stuff 
}); 
+0

Его не работает .. – Neal

0

Если я не ошибаюсь, вы подключаете событие к событию нажмите на DIV в «.submitComment».

Должно ли вы не указывать кнопку id и прикрепить к ней событие .click? Затем необходимо определить вид, который вы хотите звонить через AJAX, чтобы вернуть некоторые JSON, которые ваша функция может использовать:

The 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; 
     }) 

метод контроллера (комментарий/вставки):

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...) 
} 

The View (загружается через AJAX):

<?php 
    $this->output->set_header('Content-Type: application/json; charset=utf-8'); 
    echo $json; 
?> 

Я не тестировали этот код - или использовали codeignign широко примерно через год, но рассмотренные концепции должны поставить вас на правильный путь для того, чего вы хотите достичь. Дай мне знать!

+0

По-прежнему не получается, поскольку предыдущая форма все еще бросает ошибки вспышки – Neal

+0

Не могли бы вы пояснить? Какая предыдущая форма? Также - какие ошибки вы получаете точно? Благодарю. –

+0

Как и у меня есть два вида edit_person_details_view и comments_view, исходящие из разных контроллеров, но отображаемые на одной веб-странице. Мне нужно, чтобы представление обоих происходило отдельно. Как я могу это сделать ? – Neal

Смежные вопросы