Pergunta

Eu tenho um script que as forças de um download e eu fazer uma chamada para esta via Javascript. No entanto, a caixa de diálogo não aparecer, aqui é o script download.php:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

Aqui está o Javascript (usando JQuery):

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

Isso redireciona o navegador para outra página em vez de mostrar a caixa de diálogo abaixo.

Eu sei que a variável msg JS contém o arquivo com os cabeçalhos certas, mas eu não sei o que fazer com ela para obtê-lo para exibir a caixa de diálogo de download.

Obrigado a todos

P.S. não sabia onde colocar esta discussão JS ou PHP.

EDIT:

Eu tenho a abordagem certa tenho a certeza de que :) - Um usuário vem ao meu site, eles preencher um formulário e eles pressione enviar. Depois de alguns segundos sua fle deve aparecer em uma caixa de diálogo que pode baixar. Para fazer isso:

I fazer uma chamada de AJAX para obter o arquivo e fazer o download. Eu uso o script PHP para enviar os cabeçalhos. Agora tudo necessidade I é uma maneira de obter a caixa de diálogo dowload a aparecer !!

Foi útil?

Solução

Não é mostrando a caixa de diálogo para o fato de que sua uma chamada Ajax.

window.location.href = msg;

Isso é o que está redirecionando você. Eu não acho que você precisa de uma chamada ajax aqui, apenas chamar a página, normalmente com um link href.

Editar

Se você deseja que o formulário para enviar e mostrar a caixa de diálogo para o download, faça o seguinte:

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

Outras dicas

Se roteiro download.php cheio que não consigo encontrar nele variável $ file (apenas US $ filename) - mas em JS você envia uma variável $ file. Segundo:? Algo errado em JS - por que você usa esse nome variável msg em data: e em success:

A minha opinião é que isso pode ser esperado, como notas sktrdie. Eu não posso testar agora, mas se você pensar sobre isso: o usuário, por si só, não recebe qualquer notificação sobre coisas AJAX você está fazendo. Tendo repente essa mensagem um seria irritante.

Eu acho que se você criar um iframe (mesmo escondido?) Nessa página e redirecionamento para a URL de download que você deseja obter esse diálogo. YMMV, HTH.

Eu não codificado php por um tempo, então eu não tenho certeza se há algo de errado com seu código. Mas eu acho que o problema está na sua abordagem. Você precisa carregar download.php em um quadro não como uma resposta a uma chamada ajax. Então, basicamente você precisa para formar um iframe invisível no documento e aponte para download.php whith os parâmetros GET adicionada à url.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top