2

我已经开始了我的第一个 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';

任何帮助将不胜感激 - 我在这方面花了很多时间,但似乎无法弄清楚。

4

1 回答 1

3

您可能会遇到错误,因为该方法需要您未提供的参数(并且路由器无法正确调用)。试试这 2 件事:

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), 带有参数

于 2013-01-05T12:51:46.033 回答