Solved

force download in jquery loaded div [ codeigniter ]

Posted on 2012-04-05
5
1,682 Views
Last Modified: 2012-04-19
Hello all,

I have this codeigniter question.

I have created a force download link and this works perfectly. It is a controller with the method 'download' This gets some data and load the view that actually forces the download.

If I load this view (with jquery) into a div the raw data of the file is displayed, and there is no download.

Does anybody know why this is? I need to load it with jquery, do some other tasks and then force the download.

Hope someone can help me.


controller:
class Kleurplaten extends CI_Controller {

	public function __construct(){
            parent::__construct();
            $this->load->model('kleurplaten_model');
	}
        
        public function download_kleurplaat($id){
            
            // load data
            $content_data['kleurplaat'] = $this->kleurplaten_model->get_single_coloring_page($id);
            
            if (empty($content_data['kleurplaat'])){
                    show_404();
            }
            
            $this->load->view('pages/kleurplaten_download', $content_data);
        }

}

Open in new window


view:

$this->load->helper('download');

// do some fancy stuff here...

$data = file_get_contents(base_url().'images_upload/'.$kleurplaat['colpic_asset_location']); // Read the file's contents
$name = 'myphoto.jpg';

force_download($name, $data);

Open in new window

0
Comment
Question by:wal_toor
  • 3
  • 2
5 Comments
 
LVL 1

Expert Comment

by:frisoft
ID: 37810200
Hello,
what are you exactly (and how) loading into a div? Can you post a code related to this too?
Which file is displayed in the div? The view? Or the image?
Thanks,
Feri
0
 
LVL 8

Author Comment

by:wal_toor
ID: 37810229
Hello feri,

I am using jquery to load the data into a div:

$(".kleurplaat_downloadlink").click(function(event){
        
        event.preventDefault();
        
        var content_id = $(this).attr('rel'); // id of content is a rel attribute
        var content_holder = $(this).parent().find(".kleurplaat_download");
        var content_to_load = siteroot+'/kleurplaten/download/'+content_id;
        
        // load and process

       content_holder.load(content_to_load, function(response, status, xhr) {
            if (status == "error") {
                //error, do stuff
            }else if(status == "success"){
                //succes, do stuff
            }
        });

        
        
    });

Open in new window


It works, but de loaded view (where the download is initiated) shows only raw image data, no download.

But when I addres the url like www.site.nl/kleurplaten/download_kleurplaat/9 is works perfect

kleurplaten - controller
download_kleurplaat - method
9 - argument (id)

greetz,
walter
0
 
LVL 1

Expert Comment

by:frisoft
ID: 37810247
Hm, try to replace the call of content_holder.load(...) (the whole block) with this:
location.href = content_to_load;
0
 
LVL 1

Accepted Solution

by:
frisoft earned 500 total points
ID: 37810266
To clarify things, if You use jquery's load function, it's just a shortcut to the $.ajax method, it gets some content with ajax and replaces the given DOM node with this content, in Your case by an image (i guess).
Force download works only in the browsers, javascript has no (easy) way to save content to the user's disk, it's for security reasons.
0
 
LVL 8

Author Closing Comment

by:wal_toor
ID: 37864634
Hi Frisoft, Ahaa... this seemed to be the issue. Thanks for pointing this to me. I have found another solution to get this working.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
ASP.NET MVC 5- How can I post textarea value using @Html.ActionLink? 8 58
while read ID; do 4 56
Special characters in a TCPDF 4 27
JSON/JQuery/AJAX Error Identification 2 34
I found this questions asking how to do this in many different forums, so I will describe here how to implement a solution using PHP and AJAX. The logical flow for the problem should be: Write an event handler for the first drop down box to get …
Introduction This article is intended for those who are new to PHP error handling (https://www.experts-exchange.com/articles/11769/And-by-the-way-I-am-New-to-PHP.html).  It addresses one of the most common problems that plague beginning PHP develop…
The purpose of this video is to demonstrate how to set up the WordPress backend so that each page automatically generates a Mailchimp signup form in the sidebar. This will be demonstrated using a Windows 8 PC. Tools Used are Photoshop, Awesome…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

733 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question