单击按钮+发送用户选择的年份+ Ajax调用+打开控制器+ Codeigniter

时间:2018-02-11 06:18:09

标签: php ajax codeigniter

我在这里使用名为"生成年度报告"的按钮。生成pdf.Pdf应根据用户选择的年份生成。因此,首先用户应选择一年,然后单击按钮。

如下所示,使用ajax调用将所选值发送到名为" Annual_reports_controller"并查看" Annual_reports_view"中的pdf内容。

在我的视图中.php

   <a class="btn btn-primary" id="button" >Generate annual report</a>


   $('#button').click(function(){
   var year = $("#year option:selected").val();
   $.ajax({
   type: 'POST',
   url: "<?php echo base_url(); ?>Annual_reports_controller/index/",
   ContentType: 'application/json',
   dataType: 'json',
   data: { 'year': year},
    success : function(data) {
        },
    error : function(data) {      
    }

    });

在Annual_reports_controller.php

    public function index(){
    $year = $this->input->post('year');
    $this->load->view("Annual_reports_view",$data);

我使用下面的代码测试了Annual_reports_view.php,而不使用如下的ajax请求。

    <?php $year = date("Y") ?>
    <a class="btn btn-primary" id="button" href="Annual_reports_controller/index/<?php echo $year;?>">Generate annual report</a>

这很有效。但是在这种情况下我必须定义打开pdf页面的年份。但问题是我希望用户允许选择一年然后生成pdf页面。这就是我使用ajax调用连接控制器以打开用户选择年份的pdf页面的原因。但它似乎不起作用。

谢谢! 任何帮助表示赞赏,我坚持这个

1 个答案:

答案 0 :(得分:0)

我首先看到的是,您的点击事件并未阻止锚点的默认操作。

所以这一行:

$('#button').click(function(){

应该更改为这两行,如下所示:

$('#button').click(function(e){
    e.preventDefault();

接下来是当使用CodeIgniter时,人们常常会将base_url用于所有内容,但是base_url对于网站url不起作用,因为它不知道你可能用来获取索引的URL重写。你的网址的PHP。如果您要创建站点URL,则应始终使用site_url。所以这一行:

url: "<?php echo base_url(); ?>Annual_reports_controller/index/",

应该是这样的:

url: "<?php echo site_url('annual_reports_controller'); ?>"

请注意,我不需要使用annual_reports_controller/index,因为如果您在没有第二个URI段的情况下调用控制器,则默认情况下会隐含index。另请注意,我小写了控制器名称。虽然您的控制器文件名必须是ucfirst,但这不是您创建链接的方式。

接下来我看到你要为你的AJAX请求声明一个ContentType,但这是错误的。您可以删除该行。如果你查看.ajax()的jQuery文档,你会看到contentType用于定义你在请求中发送的内容类型,而不是你想要的内容。由于您要发布数据,因此您无需指定contentType设置,这可能会让您感到烦恼。再次,删除该行。

接下来,它看起来很明显,但在您的视图中,它并未显示您的javascript包含脚本标记。所以:

<script>
    // Your code ...
</script>

最后,当你希望CodeIgniter用json响应时,你需要输出json。现在你不可能看到你的回应,但我通常不会使用视图,而是做这样的事情:

echo json_encode([
    'foo' => 'bar'
]);

这意味着在你的jQuery .ajax()成功方法中,你可以像这样看到foo的值:

success: function(data){
    console.log( data.foo );
}

希望这有助于指明你正确的方向。