0

重複の可能性:
自動ダウンロード JQuery Ajax 呼び出しを返す

PHPでzip-flyファイルを作成しています。ファイルは問題なく作成されます。サーバーに保存しないように設定していても、すぐにダウンロードを開始します。

そのファイルでは、ボタンを押して別のファイルから jquery を使用して呼び出します。コードは次のとおりです。

$(".down").on("click",function(){
  id = this.id;
  $.ajax({
    type: "POST",
    url: "files/down.php",
    data: "id="+id,
    cache: false,
    success: function(data){
        //alert(data)
    }
  });
});

ボタンをクリックすると、ブラウザのダウンロードウィンドウが表示されますが、それを行いません...そして方法がわかりません...

サーバーにファイルを保存するようにPHPに指示すると、すべてが正しく機能します。あなたが私に答えを教えてくれたら、alert()私は奇妙なシンボルでいっぱいになるので、何かが戻ってきますが、ダウンロードウィンドウでそれを返す方法はありません.

誰も方法を知っていますか?

4

1 に答える 1

-1

Iframe を使用したくない場合。

私はこの方法をうまく使いました:

  1. ajax 呼び出しを実行し、スクリプトで圧縮してサーバーに一時的に保存します。
  2. この一時的に保存されたファイルのリンクをjsに返す/またはその場でファイルを返すリンク。
  3. リンクを window.location.replace() に設定します

私が使用したコード。

js の部分では、ajax リクエストを呼び出して、それが終了するまで待ちます。これは、偽のファイルの場所のためにサーバー側のスクリプトにファイルを返すために使用したものです。

$fakefile = $doc['doc_name'];

$finfo = new finfo(FILEINFO_MIME);
$mm_type = $finfo->file($realfile);

header("Cache-Control: public, must-revalidate"); 
header("Pragma: no-cache"); 
header("Content-Type: " . $mm_type); 
header("Content-Length: " .(string)(filesize($realfile)) ); 
header('Content-Disposition: attachment; filename="'.$fakefile.'"'); 
header("Content-Transfer-Encoding: binary"); 
readfile($realfile);
exit;

js に戻る: 応答をキャッチする:

$.post( href, null,
  function(data) {

  // file exist and is downloadable for user - call it for real.
  if(data.success === 1) {
     window.location.replace(href);
  }
  // there were errors  - display message.
  }
},'json');

それが役に立てば幸い。

于 2013-01-18T21:47:41.347 に答える