2013-01-05 51 views
2

我已經開始了我的第一個CodeIgniter項目,並且對我的控制器進行Ajax調用時遇到了很多麻煩。我在控制器中放了一個簡單的echo語句,但在瀏覽器中出現控制檯錯誤 - POST http://localhost:8888/lotto/get_results/ 404 (Not Found)。這導致我相信我沒有在AJAX調用中正確地引用控制器。以下是相關的代碼。使用CodeIgniter對控制器進行AJAX調用失敗

視圖 - 的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); 
      } 
     }); 
    } 

} 

控制器 - 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意味着你的網址無法找到 –

+0

不確定,但如果你從你的網址中刪除最後一個'/'它的作品? (/ lotto/get_results) – Pierrickouw

+0

@GreenLeaf不,刪除尾部斜槓導致相同的控制檯錯誤 – garethdn

回答

3

您面臨的錯誤可能是因爲該方法需要您沒有提供的參數(並且路由器無法正常工作)。試試這個兩兩件事:

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請求,這是不是你的情況。如果這是您的意圖,相反,您需要刪除AJAX調用中的「POST」類型,並在構建AJAX url時提供一個值。 Somethng像

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

在這種情況下,你的方法是get_result($draws),與參數

+0

感謝您解釋,現在更清晰了,並且現在正在調用控制器 - 這是錯誤的URL。 – garethdn