2010-08-30 40 views
19

Tôi muốn sử dụng chức năng ajax để tải xuống theo đó người dùng sẽ nhấp vào liên kết tải xuống (sử dụng ajax và $ _GET) truy cập tệp PHP sẽ xử lý các biến $ _GET đã gửi và truy cập tệp chính xác để tải xuống.Tải xuống tệp Ajax bằng Jquery, PHP

Tôi có một vài tập lệnh PHP để xử lý việc xử lý các biến $ _GET hoạt động riêng của chúng nhưng khi được truy cập bằng Ajax, chúng sẽ ngừng hoạt động.

Các Ajax/code PHP im sử dụng là dưới đây:

function ajaxDown(){ 
$('#downloadmsg').html(
    '<img src=\"media/images/ajaxloader.gif\" width=\"128\" height=\"15\">'); 
$('#downloadmsg').load(
'media/downloads/downManager.php?file=".$filequery['filename']."&ftype=".$downex[1]."'); 
} 

Hãy xem xét thông qua mã của tôi và giúp tôi tìm thấy những gì Im làm sai.

Thanx

+0

Hãy thể hiện những loại mã 'downManager.php' phát ra. –

+0

Đây có phải là vấn đề không? Nếu tôi nhấp vào "tải xuống tệp này" trong bất kỳ trang cụ thể nào và tệp có thể tải xuống, thì tệp sẽ tải xuống mà không cần tải lại trang đã cho. Tui bỏ lỡ điều gì vậy? –

+0

@Pekka - downManager.php mở tập tin được yêu cầu để tải xuống ví dụ: pdf –

Trả lời

54

Tôi nghĩ vấn đề là bạn đang cố gắng để tải một kết quả tập VÀO #downloadmsg, mà không phải là đi làm việc vì .load() được chỉ sẽ tải kết quả dưới dạng HTML .. .NOT dữ liệu nhị phân hoặc mã hóa khác.

Một cách tiếp cận có thể làm việc được tạo ra một iframe ẩn dưới dạng HTML, như thế này:

<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe> 

Sau đó, thiết lập attr của iframe để chuỗi truy vấn của bạn:

$("#secretIFrame").attr("src","myphpscript.php?option1=apple&option2=orange"); 

và sau đó sử dụng PHP tiêu đề buộc tải xuống khi nguồn được đặt (dưới đây là ví dụ về tiêu đề xuất bản được đặt từ một trong các tập lệnh của tôi sử dụng luồng octet):

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/force-download"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: application/download"); 
header("Content-Disposition: attachment;filename=data.xls "); 
header("Content-Transfer-Encoding: binary "); 

Hy vọng điều này sẽ hữu ích!

+0

Tôi nghĩ rằng đây có thể là sự cố để tôi thử giải pháp của bạn. Thanx –

+0

Hmmmmm. Bí quyết này làm việc cho tôi. Cảm ơn +1 – Awan

+0

Cảm ơn bạn rất nhiều vì giải pháp này – mangia

5

Tôi biết tôi đến muộn! Nhưng tôi nghĩ rằng tôi có một giải pháp đó là một chút sạch hơn mà không sử dụng một khung nội tuyến ẩn và bạn thậm chí sẽ không cần một yêu cầu ajax để làm điều đó! Sử dụng PHP Headers như đã nêu trong các câu trả lời được chấp nhận trong một file download.php

<?php 
     //download.php 
     /* 
      All your verification code will go here 
     */  
     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Type: application/force-download"); 
     header("Content-Type: application/octet-stream"); 
     header("Content-Type: application/download"); 
     header("Content-Disposition: attachment;filename=".$_GET['file']); 
     header("Content-Transfer-Encoding: binary "); 

Và trên hết JS, chỉ cần

function download(filename){ 
    window.location="http://whateveryoursiteis.com/download.php?file="+filename; 
} 

trình như một say mê: O

+0

không hoạt động với các yêu cầu bài đăng –

+0

Nó không hoạt động với các yêu cầu bài đăng, Nó chuyển thông số trong URL. Trong lưu ý của tôi ở trên tôi đã đề cập bạn không sử dụng ajax ở tất cả để thực hiện việc tải xuống. – ksealey

Các vấn đề liên quan