【问题标题】:Unsuccessful AJAX call to controller using CodeIgniter使用 CodeIgniter 对控制器的 AJAX 调用不成功
【发布时间】:2013-01-05 12:40:01
【问题描述】:

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

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

【问题讨论】:

  • 你试过了吗: url: "/lotto/get_results/lotto.php" ??? 404 表示找不到你的网址
  • 不确定,但是如果您从您的网址中删除最后一个“/”,它会起作用吗? (/lotto/get_results)
  • @GreenLeaf 否,删除尾部斜杠会导致相同的控制台错误

标签: php jquery ajax codeigniter


【解决方案1】:

您遇到错误可能是因为该方法需要您未提供的参数(并且路由器无法正常调用)。试试这 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) ,带有参数

【讨论】:

  • 感谢您的解释,现在清楚多了,对控制器的调用现在正在工作 - 这是错误的 url。
猜你喜欢
  • 1970-01-01
  • 2015-01-17
  • 2016-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-29
相关资源
最近更新 更多