2015-10-29 2 views
1

Я пытаюсь выполнить поиск Ajax с предлагаемыми результатами в виде выпадающего списка, когда я ввожу что-то, я всегда получаю сообщение об ошибке «Ошибка во время запроса ..», а консоль отображает соединение, отказавшееся от сообщения url в представлении.Ошибка ввода идентификатора Codeigniter AJAX

Контроллер:

function index(){ 
    $this->load->model('Master_model'); 
    $search= $this->input->post('search'); 
    $query = $this->Master_model->getAirportName($search); 
    echo json_encode ($query); 
    $this->load->view('Master_view'); 
} 

Модель:

function getAirportName($search){ 
    $this->db->select('*'); 
    $whereCondition = array('AirportName'=>$search); 
    $this->db->where($whereCondition); 
    $this->db->from('Airports'); 
    $query = $this->db->get(); 
    return $query->result(); 
    } 

Вид:

<script> 
    $(document).ready(function(){ 
     $("#search").keyup(function(){ 
     if($("#search").val().length>3){ 
     $.ajax({ 
      type: "post", 
      url: "http://localhost/flightstats/index.php/Master_controller", 
      cache: false,    
      data:'search='+$("#search").val(), 
      success: function(response){ 
       $('#finalResult').html(""); 
       var obj = JSON.parse(response); 
       if(obj.length>0){ 
        try{ 
         var items=[]; 
         $.each(obj, function(i,val){            
          items.push($('<li/>').text(val.AirportName + ", " + val.AirportCountry)); 
         }); 
         $('#finalResult').append.apply($('#finalResult'), items); 
        }catch(e) {  
         alert('Exception while request..'); 
        }  
       }else{ 
        $('#finalResult').html($('<li/>').text("No Data Found"));  
       }  

      }, 
      error: function(){      
       alert('Error while request..'); 
      } 
     }); 
     } 
     return false; 
     }); 
    }); 
</script> 



<div id="container"> 
<p>Type an airport</p> 
<input type="text" name="search" id="search" /> 
<ul id="finalResult"></ul> 
</div> 
+0

Проверьте свою консоль на наличие ошибок! – Saty

+0

попробуйте изменить это, 'url:"

ответ

0

В случае, если я понимаю ваш вопрос, вы не предполагают, чтобы загрузить представление для ответа AJAX. Просто echo json_encode($value). Однако, если вы поставите весь код - регулярное представление и ответ Ajax в этом методе, вы должны проверить AJAX вызова с $this->input->is_ajax_request(), что-то вроде:

public function index() 
{ 
    if ($this->input->is_ajax_request()) 
    { 
     //get data from DB and echo json 
    } 
    else 
    { 
     //do initial page load 
    } 
} 

Хотя это легче проверить код, если Аякс уединенные от начальной точки зрения код.

0

Ваша проблема в том, что ваша функция ajax и контроллер одна, вы должны разделить эту функцию на две функции, одну из которых - это форма отображения с вводом, а другая - результат возврата json.

Это пример:

Контроллер: Master_controller.php

public function index(){ 
    $this->load->view('Master_view'); 
} 

public function ajax(){ 
    $this->load->model('Master_model'); 
    $search= $this->input->post('search'); 
    $query = $this->Master_model->getAirportName($search); 
    echo json_encode ($query); 
} 

Модель: Master_model.php

public function getAirportName($search){ 
    $this->db->where('AirportName',$search); 
    $this->db->from('Airports'); 
    $query = $this->db->get(); 
    return $query->result(); 
    } 

Вид: Master_view.php

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Test ajax</title> 
    </head> 
    <body> 
     <form method="post" name="frmTestAjax"> 
      <input type="text" name="search" id="search" placeholder="Type some text right here" style="padding: 5px 10px" /> 
      <ul id="finalResult"></ul> 
     </form> 
     <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $("#search").keyup(function() { 
        if ($("#search").val().length > 3) { 
         $.ajax({ 
          type: "post", 
          url: "http://localhost/flightstats/index.php/Master_controller/ajax", 
          cache: false, 
          data: 'search=' + $("#search").val(), 
          success: function(response) { 
           $('#finalResult').html(""); 
           var obj = JSON.parse(response); 
           if (obj.length > 0) { 
            try { 
             var items = []; 
             $.each(obj, function(i, val) { 
              items.push($('<li/>').text(val.AirportName + ", " + val.AirportCountry)); 
             }); 
             $('#finalResult').append.apply($('#finalResult'), items); 
            } catch (e) { 
             alert('Exception while request..'); 
            } 
           } else { 
            $('#finalResult').html($('<li/>').text("No Data Found")); 
           } 

          }, 
          error: function() { 
           alert('Error while request..'); 
          } 
         }); 
        } 
        return false; 
       }); 
      }); 
     </script> 
    </body> 
</html> 

P/s: Извините, мой английский так плохо. Я пытаюсь улучшить его :)

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