使用CodeIgniter对控制器的AJAX调用失败 - php

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

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

参考方案

您可能会遇到错误,可能是因为该方法期望使用您未提供的参数(并且路由器无法正常执行调用权)。试试这2件事:

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

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: "<?php echo site_url('lotto/get_results');?>/"+numOfDraws;

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

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP Laravel从另一个驱动器读取文件 - php

我目前正在学习Laravel。我想知道是否有一种方法可以在Laravel中使用Storage::从另一个硬盘访问文件(使用Windows)。例如,我在驱动器C:上安装了带有Laravel的Xampp,但是我想访问网站目录之外的E:上的文件。我试过使用Storage::files('E:')和File::files('E:…