6

My html code is like this :

<a href="javascript:;" onclick="showAjaxPdf('{{ $row->file_path }}');"><i class="fa fa-file-pdf-o"></i></a>

My javascript code is like this :

function showAjaxPdf(file_path)
        {
            var file_path = file_path.replace(/\\/g,"/");
            //example : file_path = assets/images/myfile.pdf
            $.ajax({
                type: "POST",
                data: 'file_path=' + file_path,
                url: "news/test",
                success: function(response)
                {
                    $('#test').html(response);

                }
            });
        }

My function test in controller :

public function postTest(Request $request)
    {
$file_path = $request->input('file_path');  
        return response()->download($file_path);       
    }

When I click on the pdf icon, no response.

I wish, when click on the pdf icon, appear like this:

enter image description here

how to keep when click pdf icon, the image appears like it?

Thank you

Jignesh Joisar
  • 13,720
  • 5
  • 57
  • 57
moses toh
  • 12,344
  • 71
  • 243
  • 443
  • 2
    Possible duplicate of [Download a file by jQuery.Ajax](http://stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax) – user1669496 Dec 29 '15 at 21:31
  • @user3158900, I think it is not the same. My problem in ajax response. `success: function(response) { $('#test').html(response); }` – moses toh Dec 29 '15 at 21:44
  • @user3158900, The response seems wrong. – moses toh Dec 29 '15 at 21:49
  • Your controller is attempting to return a file download. You are taking that response and attempting to set it as html on the page. It's very hard to tell what you actually want. You want the user to be able to download the pdf file to their machine or do you want the contents of the pdf itself to appear somewhere on the page? – user1669496 Dec 29 '15 at 21:52
  • 1
    @user3158900, Thank you for answering my question. I want the user to be able to download the pdf file to their machine. – moses toh Dec 29 '15 at 22:14
  • definitely a duplicate of the above question :-D – Adrian Tombu Dec 29 '15 at 23:21
  • @user3158900, @Adrian Tombu, I change javascript like this : `function showAjaxPdf(file_path){ $.post("news/test", { file_path: file_path } ); }`. But still no success to download pdf or displays like this image : http://imgur.com/uhPfOWL – moses toh Dec 30 '15 at 00:38
  • I'm facing the same problem. Any solutions? – Gabriel Augusto Oct 31 '17 at 23:19

3 Answers3

1

What I have done is, written two separate route one to verify and one to download. On success of one ajax I have triggered window.open(downloadUrl,'_blank') to download in separete window. It is not the way asked but it prevents any upcoming errors as verify url will sort that

$.ajax({
            url: verifyUrl,  
            type: 'get',
            cache: false,
            data: null,
            error: function (err){$('#ajax_loader_div').hide();},
            success: function(response) {
                console.log(response);
                $('#ajax_loader_div').hide();
                if (response.status == 'success') 
                {

                    window.open(downloadUrl,'_blank');

                }else if(response.status == 'error') 
                {
                    //show error
                }
            }

        });
0

for that you need to set the header with response object. Please see the below code.

    $headers = array(
                  'Content-Type'=> 'application/pdf'
                );
$file_path = $request->input('file_path');  
 //TODO: you have to split the file name from url 
 return Response::download($file_path, '<filename>', $headers);

I hope this code will help you

HItesh Tank
  • 636
  • 1
  • 6
  • 13
0

return Response::download($file_path, '<filename>', $headers);

It's return response, not download file!

Jignesh Joisar
  • 13,720
  • 5
  • 57
  • 57
Danillo Leão Lopes
  • 356
  • 1
  • 3
  • 11