2

I've started my first CodeIgniter project and am having a lot of trouble making an Ajax call to my controller. I've put a simple echo statement in the controller but am getting a console error in the browser - POST http://localhost:8888/lotto/get_results/ 404 (Not Found). This leads me to believe that i'm not referencing the controller properly in the AJAX call. Below is the relevant code.

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";
    }
}
?>

Also in my config file i've got the following:

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

Any help would be appreciated - i've spent a lot of time on this but can't seem to figure it out.

3
  • Have you tried: url: "/lotto/get_results/lotto.php" ??? 404 means your url cannot be find Commented Jan 5, 2013 at 12:44
  • Not sure, but if you remove the last '/' from your url it works ? (/lotto/get_results) Commented Jan 5, 2013 at 12:45
  • @GreenLeaf No, removing the trailing slash results in the same console error Commented Jan 5, 2013 at 12:47

1 Answer 1

3

You're facing an error probably because the method expects an argument you're not providing (and the router can't work the call right). Try this 2 things:

1) crate an url using the built-in functions (to avoid problems with that):

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

2) Since the method looks like should receive a POST variable, and not a GET one, you need to fetch it the right way:

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

Passing an argument to the method works if the variable comes from an HTTP GET request, which is not your case. If that's your intention, instead, you need to remove the "POST" type in the AJAX call and provide a value while building the AJAX url. Somethng like

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

In this case, your method would be get_result($draws) , with the parameter

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks for explaining that, it's a lot clearer now and the call to the controller is now working - it was the wrong url.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.