使用CodeIgniter调用控制器失败的AJAX

时间:2013-01-05 12:40:02

标签: php jquery ajax codeigniter

我已经启动了我的第一个CodeIgniter项目,并且在向控制器发出Ajax调用时遇到了很多麻烦。我在控制器中放了一个简单的echo语句,但是在浏览器中出现了控制台错误 - POST http://localhost:8888/lotto/get_results/ 404 (Not Found)。这让我相信我没有在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';

任何帮助都会受到赞赏 - 我花了很多时间在这上面,但似乎无法弄明白。

1 个答案:

答案 0 :(得分:3)

您遇到错误可能是因为该方法需要您未提供的参数(并且路由器无法正常工作)。试试这两件事:

1)使用内置函数创建一个url(以避免出现问题):

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

2)由于该方法看起来应该接收一个POST变量,而不是一个GET,你需要以正确的方式获取它:

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时提供值。有些喜欢

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

在这种情况下,您的方法为get_result($draws),参数为