2013-04-16 61 views
0

請幫助我。我的錯誤在哪裏?我在IIS服務器上有很多XML文件。點擊按鈕鏈接到XML後在JS文件中。 JS發送鏈接到PHP文件。 PHP必須顯示保存對話框才能保存此鏈接。見代碼:如何將XML文件從服務器動態保存到本地機器?

JS:

function showAl(url) 
    { 
    alert(url); 
    var ajax = getRequest(); 
    ajax.onreadystatechange = function() 
    { 
     if(ajax.readyState == 4) 
     {   
      ... 
     } 
    } 

    ajax.open("POST", "/do_query.php", true); 
    var data = 'info='+url; 
    ajax.send(data); 
    } 

PHP:

<?php 
    if (isset($_POST['info'])) 
    { 
    $info = $_POST['info']; 

    header('Content-Type: application/xml;'); 
    header('Content-Disposition: attachment; filename=file.xml;'); 

    readfile(str_replace(" ", "%20", $info), false);  
    } 
?> 

感謝的提前!

+1

您正在使用AJAX提交表單並捕獲響應。你可以不使用AJAX。 –

+0

請給我一個例子,我試試吧。 – Andrew

回答

2

三個簡單的方法來下載文件:

  1. 好老形式

    <form id="the-form" action="/do_query.php" method="post"> 
        <input type="hidden" name="info" value="test"> 
        <input type="Submit" value="Download with regular form"> 
    </form> 
    
  2. 提交好老形式的JavaScript

    <script type="text/javascript"> 
    function download(){ 
        document.getElementById("the-form").submit(); 
    } 
    </script> 
    <input type="Submit" value="Download with JavaScript" onclick="download()"> 
    
  3. 切換到GET(需要改變到do_query.php):

    <a href="/do_query.php?info=test">Download with link</a> 
    

與AJAX的問題是,它運行電流(HTML)頁面上。它可以處理頁面HTML或重定向到其他位置,但不能發送自定義HTTP響應。

+0

感謝您提供詳細,正確和快速的回​​復! – Andrew

0

當您使用AJAX時,您不能提示用戶保存文件,您需要將瀏覽器窗口指向要下載的文件的URL。這也意味着您將需要使用GET方法而不是POST方法來傳輸文件。

試試這個:

JS:

function showAl(url) 
{ 
    window.location.href = '/do_query.php?info=' + url; 
} 

PHP:

if (isset($_GET['info'])) 
{ 
    $info = $_GET['info']; 

    // ... 

這應當提示用戶下載該文件。

相關問題