我在这里使用名为"生成年度报告"的按钮。生成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页面的原因。但它似乎不起作用。
谢谢! 任何帮助表示赞赏,我坚持这个
答案 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 );
}
希望这有助于指明你正确的方向。