首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击按钮+发送用户选择的年份+ Ajax调用+打开控制器+代码点火器

单击按钮+发送用户选择的年份+ Ajax调用+打开控制器+代码点火器
EN

Stack Overflow用户
提问于 2018-02-11 06:18:09
回答 1查看 55关注 0票数 0

在这里,im使用一个名为"Generate“的按钮来生成一个pdf.Pdf,它应该由user.So根据选定的年份生成,用户首先应该选择一年,然后单击该按钮。

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

In my view.php

代码语言:javascript
复制
   <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) {      
    }

    });

In Annual_reports_controller.php

代码语言:javascript
复制
    public function index(){
    $year = $this->input->post('year');
    $this->load->view("Annual_reports_view",$data);

我使用下面的代码测试了Annual_reports_view.php,而没有像下面这样使用ajax请求。

代码语言:javascript
复制
    <?php $year = date("Y") ?>
    <a class="btn btn-primary" id="button" href="Annual_reports_controller/index/<?php echo $year;?>">Generate annual report</a>

这个工作,perfectly.But,在本例中,我必须定义年份来打开pdf page.But,问题是我希望用户允许选择一年,然后生成pdf页面。这就是为什么我使用ajax调用与控制器连接,打开用户选择的年份的pdf页面。但这似乎行不通。

谢谢!感谢你的帮助,我被困在这上面

EN

回答 1

Stack Overflow用户

发布于 2018-02-11 17:14:41

我看到的第一件事是,您的click事件并不妨碍锚点的默认操作。

所以这句话:

代码语言:javascript
复制
$('#button').click(function(){

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

代码语言:javascript
复制
$('#button').click(function(e){
    e.preventDefault();

其次,在使用CodeIgniter时,人们使用base_url进行任何事情都是一个常见的错误,但是base_url对于站点URL并不有效,因为它不知道URL重写,而您可能会用它将index.php从URL中删除。如果要创建站点URL,则应该始终使用site_url。所以这句话:

代码语言:javascript
复制
url: "<?php echo base_url(); ?>Annual_reports_controller/index/",

应该是这样的:

代码语言:javascript
复制
url: "<?php echo site_url('annual_reports_controller'); ?>"

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

接下来我看到的是,您正在为AJAX请求声明一个ContentType,但这是错误的。你可以去掉那条线。如果您查看.ajax()的.ajax文档,您将看到contentType用于定义在请求中发送的内容类型,而不是您想要返回的内容。由于您正在发布数据,所以不需要指定contentType设置,这可能会给您带来麻烦。再一次删除这一行。

接下来,这似乎是显而易见的,但在您的观点中,它并没有显示您的javascript是用脚本标记包装的。所以:

代码语言:javascript
复制
<script>
    // Your code ...
</script>

最后,当您希望CodeIgniter使用json进行响应时,需要输出json。现在还不可能看到您的响应,但我通常不会使用视图,而是执行如下操作:

代码语言:javascript
复制
echo json_encode([
    'foo' => 'bar'
]);

这意味着在jQuery .ajax()成功方法中,您可以看到foo的值如下所示:

代码语言:javascript
复制
success: function(data){
    console.log( data.foo );
}

希望这能帮你找到正确的方向。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48728894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档