在这里,im使用一个名为"Generate“的按钮来生成一个pdf.Pdf,它应该由user.So根据选定的年份生成,用户首先应该选择一年,然后单击该按钮。
如下所示,im使用ajax调用将选定的值发送到名为"Annual_reports_controller“的控制器,并查看"Annual_reports_view”中的pdf内容。
In my view.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) {
}
});In 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>这个工作,perfectly.But,在本例中,我必须定义年份来打开pdf page.But,问题是我希望用户允许选择一年,然后生成pdf页面。这就是为什么我使用ajax调用与控制器连接,打开用户选择的年份的pdf页面。但这似乎行不通。
谢谢!感谢你的帮助,我被困在这上面
发布于 2018-02-11 17:14:41
我看到的第一件事是,您的click事件并不妨碍锚点的默认操作。
所以这句话:
$('#button').click(function(){应该改为这两行,如下所示:
$('#button').click(function(e){
e.preventDefault();其次,在使用CodeIgniter时,人们使用base_url进行任何事情都是一个常见的错误,但是base_url对于站点URL并不有效,因为它不知道URL重写,而您可能会用它将index.php从URL中删除。如果要创建站点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()的.ajax文档,您将看到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 );
}希望这能帮你找到正确的方向。
https://stackoverflow.com/questions/48728894
复制相似问题