2015-05-12 4 views
2

Я пытаюсь отправить файлы клиенту через jQuery, AJAX и PHP. Я использую JQuery v1.11.2 и XAMPP v3.2.1,Отправлять файлы клиенту с помощью jquery ajax и php

Вот мой JQuery код:

<script> 
$(document).ready(function(){ 
    $("#myBtn").click(function(){ 
     $.ajax({ // post file name 
      type: "POST", 
      data: { 
       file: "testfile.xlsx" 
       }, 
      url: "sendfile.php", 
      context: $("#result"), 
      success: function(data, status, xhr){ 
       $(this).html(data); 
      } 
     }); 
    }); 
}); 
</script> 

sendfile.php:

<?php 

FUNCTION send_file($name) { // function ... send file to client 
    OB_END_CLEAN(); 
    $path = $name; 

//cek connection if lost connection with client 
    IF (!IS_FILE($path) or CONNECTION_STATUS()!=0) RETURN(FALSE); 
//header 
//------------------------------------------------------------- 
    HEADER("Cache-Control: no-store, no-cache, must-revalidate"); 
    HEADER("Cache-Control: post-check=0, pre-check=0", FALSE); 
    HEADER("Pragma: no-cache"); 
    HEADER("Expires: ".GMDATE("D, d M Y H:i:s", MKTIME(DATE("H")+2, DATE("i"), DATE("s"), DATE("m"), DATE("d"), DATE("Y")))." GMT"); 

//set last modified property 
    HEADER("Last-Modified: ".GMDATE("D, d M Y H:i:s")." GMT"); 
    HEADER("Content-Type: application/octet-stream"); 
    HEADER("Content-Length: ".(string)(FILESIZE($path))); 
    HEADER("Content-Disposition: inline; filename=$name"); // file 
    HEADER("Content-Transfer-Encoding: binary\n"); 
//----------------------------------------------------------------- 
    IF ($file = FOPEN($path, 'rb')) { // send file 
    WHILE(!FEOF($file) and (CONNECTION_STATUS()==0)) { 
    PRINT(FREAD($file, 1024*8)); 
    FLUSH(); 
    } 
    FCLOSE($file); 
    } 
    RETURN((CONNECTION_STATUS()==0) and !CONNECTION_ABORTED()); 
} 

// send file 
if(!send_file($_POST['file'])){ 
    echo "error."; 
} 

Когда я нажимаю кнопку нет файлы, полученные вместо случайных предложений в #result

Если я использую непосредственно в PHP, то работают p roperly

send_file("testfile.xlsx"); 

Есть ли более эффективные методы?

+1

Похожий вопрос уже существует. это может быть то, что вы ищете. http://stackoverflow.com/questions/166221/how-can-i-upload-files-asynchronously – Sagar

+0

Вы не можете получать закачки через AJAX ... вам нужно выполнить какое-то перенаправление. –

+0

Я думаю, эта ссылка поможет вам http://stackoverflow.com/questions/5392344/sending-multipart-formdata-with-jquery-ajax –

ответ

Смежные вопросы