2013-01-05 6 views
2

Я начал свой первый проект CodeIgniter, и у меня возникли проблемы с вызовом Ajax для моего контроллера. Я поставил простой контроллер эха в контроллер, но я получаю консольную ошибку в браузере - POST http://localhost:8888/lotto/get_results/ 404 (Not Found). Это заставляет меня поверить, что я не ссылаюсь на контроллер правильно в вызове AJAX. Ниже приведен соответствующий код.Неудачный вызов AJAX контроллеру с помощью CodeIgniter

View - index.php

$(document).ready(function(){ 
    $('#notification').hide(); 
    retrieveValues(); 
}); 

$('.numDraws').change(function(){ 
    retrieveValues(); 
}); 

function retrieveValues() { 
    if (!checkConnection()) { 
     $('#notification').html("<span>No internet connection available</span>"); 
     $('#notification').slideDown(500, 'linear'); 
     return; 
    } else { 
     $('#notification').slideUp(500, 'linear'); 
     $('#loading').fadeIn(200); 
     var numOfDraws = parseInt($('.numDraws').find('option:selected').val()); 
     if (isNaN(numOfDraws)) { 
      numOfDraws = "ALL"; 
     } 
     $.ajax({ 
      url: "/lotto/get_results/", 
      type: "post", 
      data: {numOfDraws:numOfDraws}, 
      success: function (data) { 
       // var json = $.parseJSON(data); 
       // setTimeout(function(){displayResults(json)} ,1200); 
       alert(data); 
      } 
     }); 
    } 

} 

Controller - lotto.php

<?php 

class Lotto extends CI_Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->load->model('lotto_model'); 
    } 

    public function index() 
    { 
     $data['title'] = "Home"; 

     $this->load->view('templates/header', $data); 
     $this->load->view('lotto/index'); 
     $this->load->view('templates/footer'); 

    } 

    public function get_results($numOfDraws) { 
     //$data['results'] = $this->lotto_model->get_results(1); 
     echo "Reached the controller"; 
    } 
} 
?> 

Кроме того, в моем файле конфигурации я получил следующее:

$config['base_url'] = ''; 
$config['index_page'] = ''; 
$config['uri_protocol'] = 'AUTO'; 

Любая помощь будет оценена ated - я потратил много времени на это, но, похоже, не понял этого.

+0

Вы пробовали: URL: "/lotto/get_results/lotto.php" ??? 404 означает, что ваш url не может найти –

+0

Не уверен, но если вы удалите последний '/' с вашего URL-адреса, он работает? (/ lotto/get_results) – Pierrickouw

+0

@GreenLeaf Нет, удаление конечной косой черты приводит к той же ошибке консоли – garethdn

ответ

3

Вы столкнулись с ошибкой, вероятно, потому, что метод ожидает аргумент, который вы не предоставляете (и маршрутизатор не может работать с правом вызова). Попробуйте это 2 вещи:

1) обрешетка URL, используя встроенные функции (чтобы избежать проблем с этим):

url: "<?php echo site_url('lotto/get_results');?>" 

2) Так как метод выглядит должен получить переменную POST, а не получить, вам нужно получить это правильный путь:

public function get_results() { 
     $numOfDraws = $this->input->post('numOfDraws'); 
     //do something with $numOfDraws here 
     echo $numOfDraws; // just to check the value is being passed 
    } 

Передача аргумента в метод работает, если переменная приходит из запроса HTTP GET, который не ваш случай. Если это ваше намерение, вместо этого вам нужно удалить тип «POST» в вызове AJAX и предоставить значение при создании URL-адреса AJAX. Somethng как

url: "<?php echo site_url('lotto/get_results');?>/"+numOfDraws; 

В этом случае, ваш метод будет get_result($draws) с параметром

+0

Спасибо, что объяснили, что теперь это намного яснее, и вызов контроллера теперь работает - это был неправильный URL-адрес. – garethdn

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