在调用下载功能之前调用ajax函数

时间:2017-04-20 15:06:54

标签: php jquery ajax codeigniter

我正在开发codeigniter的网站,并且有下载文件的设施。 我的问题是我想保留一个记录,当用户下载任何文件时,它会在数据库中插入记录以保存下载历史记录。 我已经在该按钮上调用了jquery ajax,并在href属性中调用了下载功能。 请给我一些建议,当我点击下载功能时,如何首先调用jquery函数,然后完成下载。 提前谢谢你

这是我的下载代码

public function download_b_question_paper($fileName = NULL) 
{   
    $this->load->helper('download'); //load helper
    if ($fileName)
    {
        $file = realpath ( "b_question" ) . "\\" . $fileName;               
        if (file_exists ( $file ))// check file exists    
        {                   
            $data = file_get_contents( $file );// get file content
            force_download ( $fileName, $data );//force download
        }
    }
}

这是为了创建使用ajax下载的链接

$(".link").click(function(){
    var id=$(this).data("data1");
    $.ajax({
        type : 'POST',
        url  : '<?php echo base_url();?>index.php/Faculty_controller/get_all_bmaterial',
        data : { 'id' : id },
        success : function(data)
        {
            $(".tbl").html("");
            recs=$.parseJSON(data);
            head='<tr><td>Sr. No</td><td align=center><br><h4>Material Name</td><td colspan="2"><center>Action</center></td></tr>';
            $(".tbl").append(head);
            $.each(recs,function(i,v)
            {
                a=i+1;
                r='<tr><td><br><center>'+a+'</td><td><br>'+v.file_name+'</td><td><br><center><a class="dwnld btn btnd btn-danger" href="<?php echo base_url();?>index.php/Student_controller/download_bachelor_material/'+v.file_name+'"/"'+v.materialno+'" data-data1='+v.materialno+' data-data2='+v.file_name+' data-content="Download this material" data-placement="bottom" data-trigger="hover"><i class="fa fa-download"></i></a></td></tr>';
                $(".tbl").append(r);
                $('a').tooltip({ });                        
            });//end of foreach
        }//end of success 
    });//end of ajax
});//end of link click function

这是我想在调用下载函数之前调用的ajax

$("a").click(function(){
    alert('hello');
    $.ajax({    
        type : 'POST',
        data : { 'subkey' :  id },
        url : "<?php echo base_url()?>index.php/Studnet_Controller/b_mat_activity",
        success : function(data)
        {
            alert('hello');
        }
    });
});

1 个答案:

答案 0 :(得分:0)

在你的ajax配置中,有一个名为beforeSend的回调你可以在发送请求之前使用它来执行功能。

$ajax({
    /*...*/
    beforeSend: function(xhr) {
        //beforeSend;
    },
    success: function(data) {

    },
    error: function(error) {

    }
})

你也可以在第一个电话成功时拨打第二个电话。

$ajax({
    /*...*/
    success: function(data) {
    //secondCall
        $.ajax({
             /*...*/
        })
    },
    error: function(error) {

    }
})