2013-08-01 3 views
0

Я довольно новичок в использовании Jquery и создаю логин для простого сайта, создавая с помощью CodeIgniter и bootstrap. После подачи журнала в кнопку, он не будет отображаться никаких сообщений об ошибках или успеха, а это означает, что я даже не знаю, если это на самом деле отправлять данные в контроллер вот мой код,Codeigniter twitter bootstrap login using JQuery

Jquery код

 <script> 
    //Wait until the DOM is fully loaded 
    $(document).ready(function(){ 
    //Listen for the form submit 
    $('#loginform').submit(logIn); 
    }); 

//The function that handles the process 
function logIn(event) 
{ 
    //Stop the form from submitting 
    event.preventDefault(); 
     //Hide our form 
       // $('#loginform').slideUp(); 

    //Collect our form data. 
    var form_data = { 
    email : $("[name='email']").val(), 
    password : $("[name='password']").val(), 

    }; 

    //Begin the ajax call 
    $.ajax({ 
     url: "admin", 
     type: "POST",  
     data: form_data, 
     dataType: "json", 
     cache: false, 

     success: function (json) {    
      if (json.error==1) 
      { 
       //Show the user the errors. 
       $('#message').html(json.message); 
      } else { 
       //Hide our form 
       $('#loginform').slideUp(); 
       //Show the success message 
       $('#message').html(json.message).show(); 
      }    
     } 
     }); 
    } 
</script> 

login.php

  <?php 
      echo $this->session->flashdata('alert'); 
     ?> 
     <div id="message"></div> 
<?php 
    $attr = array('class' => 'admin-login form-horizontal well form-signin', 'id' => 'loginform'); 
    echo validation_errors('<div class="alert alert-error">', '</div>'); 
?> 
<?php echo form_open(site_url('admin'), $attr) ?> 
<!--<form action="<?php echo site_url('track-order'); ?>" method="post" class="form-horizontal form-search" id="trackModalform">--> 
    <div class="control-group"> 
     <label class="control-label">Track Your Order</label> 
    </div> 
    <div class="control-group"> 
     <label class="control-label" >Email:</label> 
     <div class="controls"> 
      <div class="input-prepend"> 
       <span class="add-on"><i class="icon-qrcode"></i></span> 
       <input type="text" name="email" class="input-block-level email" placeholder="Email address"> 
      </div> 
     </div> 
    </div> 
    <div class="control-group">  
     <label class="control-label" >Password:</label> 
     <div class="controls"> 
      <div class="input-prepend"> 
       <span class="add-on"><i class="icon-key"></i></span> 
       <input type="password" name="password" class="input-block-level password" placeholder="Password"> 
      </div> 
     </div> 
    </div> 
    <div class="form-actions" style="margin-bottom: 0px; padding-bottom: 0px;"> 
     <input type="submit" class="btn btn-primary " name="signin" value="Sign In!" id="login"> 
    </div> 
</form> 

мой контроллер

public function index() 

{ 
     if (!file_exists('application/views/admin/index.php')) 
     { 
      //sorry that page is not available 
      show_404(); 
     }     

       $this->form_validation->set_rules('email', 'Name', 'required|min_length[5]|max_length[50]|valid_email'); 
       $this->form_validation->set_rules('password', 'Password', 'required|min_length[5]'); 


     if($this->form_validation->run() === TRUE) 
     { 
      echo json_encode(array('error' => '1', 'message' => validation_errors('<div class="alert alert-error"><strong>Error!</strong> ', '</div>'))); 
     } else { 
      //Save the data to the database, of course you will need all the data first. 
      if($this->admin_model->validate_admin_login()): 
      //Send the success to our javascript file. 
      echo json_encode(array('error' => '0', 'message' => '<div class="alert alert-success"><strong>Success!</strong> You have been registered!</div>')); 

      endif;  
     } 

     $data['title'] = ucfirst('Admin - Home'); 
     $data['currentpage'] = 'home'; 

     $this->load->view('admin/index', $data); 
} 

модель

public function validate_admin_login() 
{ 
    $this->str = do_hash($this->input->post('password')); // SHA1 
    $this->db->where('email', $this->input->post('email')); 
    $this->db->where('password', $this->str); 
    $query = $this->db->get('ip_admin'); 

    if($query->num_rows == 1) 
    { 
     $data['admin_sess'] = $this->admin_model->admin_details($this->input->post('email')); 
      $data = array(
      'email' => $this->input->post('email'), 
      'is_admin_logged_in' => true 
      );  
      $this->session->set_userdata($data);  
     return true; 
    } 
} 

public function admin_details($user) 
{   
    $query = $this->db->select('*')->from('ip_admin')->where('email', $user); 
    $query = $query->get(); 
    return $data['admin_sess'] = $query->row();  
} 

Я не отвечает или выводить любое сообщение, чтобы указать успех или неудачу, может быть, я все неправильно, чтобы начать с.

Мне нужно, чтобы он запросил db, возвращает сообщение для меня на странице просмотра, используя параметр json на моем контроллере.

Спасибо всем.

+1

Это потому, что вы смешиваете тип ответа, ваша функция входа выводит html и поверх нее выводит строку json с использованием эха. Вам придется обрабатывать оба запроса ajax и non-ajax, используя простую проверку, например if ($ this-> input-> is_ajax_request()) echo json_encode (array()) else $ this-> load-> view ('xxx «); – ahmad

+0

Ахмад прав. На второй взгляд в функции, возвращающей конкретный результат, нет точки остановки, она возвращает json, а также html. – snh

+0

Пожалуйста, Ахмад и Стивен Герой, можете ли вы, ребята, предоставить мне несколько строк кода? Я могу взять это оттуда. Thanks – Normal9ja

ответ

2

Я предлагаю вам добавить данные в var_data так:

var form_data = { 
     email : $("[name='email']").val(), 
     password : $("[name='password']").val(), 
     //add a data which is 
     ajax: '1' 
     }; 

И в чеке контроллера, если это POST'ed:

if($this->input->post('ajax'){ 
     //do something 
    }else{ 
     //do something 
    } 

так оттуда вы можете проверить, если это работая или нет. а также установить firebug для отладки в Firefox. В Chrome попробуйте проверить элемент и увидеть консоль

+0

немного поработал, добившись определенного прогресса. Я отправлю свой код после того, как я их всех заработаю – Normal9ja

0

Я честно не прошел весь ваш код, так как это действительно не так сложно, вместо этого я хотел бы предложить вам установить Firebug для отладки вашего jquery, если вы еще не установили его. Его необходимо при разработке с помощью javascript. Он будет печатать любые ошибки или успехи при вызове и обработке событий.

Как использовать: Firebug FAQ

EDIT:

Как вы просили код:

if($this->form_validation->run() === TRUE) 
{ 
    echo json_encode(array('error' => '1', 'message' => validation_errors('<div class="alert alert-error"><strong>Error!</strong> ', '</div>'))); 
} else { 
    //Save the data to the database, of course you will need all the data first. 
    if($this->admin_model->validate_admin_login()): 
    //Send the success to our javascript file. 
    echo json_encode(array('error' => '0', 'message' => '<div class="alert alert-success"><strong>Success!</strong> You have been registered!</div>')); 

    endif;  
} 

$data['title'] = ucfirst('Admin - Home'); 
$data['currentpage'] = 'home'; 

$this->load->view('admin/index', $data); 

Wtihin этот блок, вы echo'ing JSON один раз, а затем выплевывая HTML после этого. Просто попробуйте удалить:

$data['title'] = ucfirst('Admin - Home'); 
$data['currentpage'] = 'home'; 

$this->load->view('admin/index', $data); 

Или создать отдельные функции контроллера для ваших запросов, вещи получить действительно грязный, когда вы пытаетесь запихнуть все в одной функции.

+0

На самом деле я установил Firebug, но, похоже, я не вижу его. – Normal9ja

+1

Вы видите какой-либо вывод на вкладке консоли? – snh

+0

да, нажав на вкладку Все, что дал мне этот POST HTTP: // локальный/paid_projects/iphoneappsonline/админ \t 200 OK \t \t 524ms я расширил его и на вкладке ОТВЕТА, я вижу весь исходный код с моей страницы, написанной там, все, никакого другого ответа, как есть. – Normal9ja