2012-05-16 43 views
6

Tôi có một liên kết và khi người dùng nhấp vào nó, sau đó anh ấy nhận được một tệp PDF. Trong jQuery, tôi tạo một cuộc gọi POST ajax đến máy chủ để lấy PDF. Phản hồi là tệp PDF, với tiêu đề nội dung chính xác v.v. thường khiến trình duyệt mở plugin Reader hoặc cho phép người dùng lưu tệp PDF. Nhưng trong trường hợp của tôi, điều này không hoạt động. Có cách nào để đặt loại nội dung dữ liệu hoặc đặt loại nội dung thành PDF không?jQuery Ajax: phản hồi pdf

gọi ajax của tôi:

$('#sf_getpdf').click(function() { 

$.ajax({ //create an ajax request to load_page.php 

     type: "POST", 

     url: "index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>", 

     data: 'invoice_id=<?php echo $invoice_id; ?>&sf_token=<?php echo $sf_token ?>', //with the page number as a parameter 

     dataType: "text", //expect html to be returned 


     success: function(msg){ 



      if(parseInt(msg)!=0) //if no errors 

      { 

      document.write(msg) 
      } 

     } 

    }); 

}); 

Firebug, phản ứng: Firebug

đáp ứng trong trình duyệt ...

response in browser

Tôi đã cố gắng để thiết lập content-type trong máy chủ , không thành công:

content-type in server

Chỉnh sửa: Ajax là không cần thiết, để thực hiện việc này.

<a id="adr_stitok" target="_blank" href="index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>&invoice_id=<?php echo $invoice_id; ?>&sf_token=<?php echo $sf_token ?>" >Download</a></td> 

Sẽ làm việc này.

+1

document.write() không có nghĩa là sẽ được sử dụng như thế. Bạn nên tắt việc gửi người dùng đến một trang mới. – Corbin

+0

Ahhh, tôi ngu ngốc. Download Tôi không cần ajax để thực hiện việc này. :) – Adrian

+2

Tại sao bạn không chỉ đơn giản là siêu liên kết liên kết pdf? hoặc gửi yêu cầu qua biểu mẫu? – John

Trả lời

5

Hãy chắc chắn phía máy chủ của bạn trả về một nội dung downloadeable và thực hiện một trình tập tin, một cái gì đó như:

  //$.download('path', 'data' [, 'post']) 
      $.download = function(url, data, method) { 
       //url and data options required 
       if(url && data) { 
        var form = $('<form />', { action: url, method: (method || 'get') }); 
        $.each(data, function(key, value) { 
         var input = $('<input />', { 
          type: 'hidden', 
          name: key, 
          value: value 
         }).appendTo(form); 
        }); 
       return form.appendTo('body').submit().remove(); 
       } 
      throw new Error('$.download(url, data) - url or data invalid'); 
      }; 

$.download("index.php?route=sale/order/superfaktura_getpdf&token=<?php echo $token; ?>", {}, 'post') 
0

Nó sẽ không hoạt động vì cuộc gọi AJAX KHÔNG tìm nạp PDF và tải nó bên trong trình duyệt. Đó là lý do tại sao nó được gọi là XMLHttpRequest .. nó chỉ trao đổi văn bản!

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