2013-04-16 2 views
0

Помогите мне пожалуйста. Где моя ошибка? У меня есть много файлов XML на сервере IIS. После нажатия кнопки ссылка на 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']; 

    // ... 

Это должно подсказать пользователю, чтобы загрузить файл.