2016-08-05 3 views
2

ajaxの投稿構造からフェッチされた動的に生成されたファイルを返す方法はありますか?ファイルが返ってくるAjax投稿

データのリスト(データは複雑な集約クエリから生成され、idやその他から呼び出すことはできません)を生成する小さなWeb mvcプロジェクトを作成し、一部をエクスポートしたい部分に移動します選択した部分をファイルに追加してダウンロードします。それは動作しませんどのように

:私は(jQueryのDataTableのを使用して)、キーデータをいくつかのフィールドを選択するページで 1. 2.コントローラに送信 3.バイトストリームを生成し、それを返す(春は、正確には) "Content-disposition"、 "attachment"ヘッダーを持つHTTPResponseとして。

私は行を選択し、必要なデータをJQuery-> Ajaxを使って作成するので、Controller-> Postの結果はjavascriptの部分にとどまり、 "Save as ..."を与えません。

私はすでに一時ディレクトリなどを考えていますが、最後のオプションを保存しています。

+0

残念ながらNo .... –

+0

しかし、私は何とか新しいタブ\ウィンドウを開き、ファイルを直接受信する通常のサーバーの応答を受信する必要があります非Ajax投稿を行うことはできますか? –

+0

明らかに..フォームを投稿することができます...コンテンツがダウンロード可能なファイルであれば、現在のページを失うことなく、ダウンロードまたは自動ダウンロードを開始するためのポップアップが表示されます。 –

答えて

1

残念ながら、ファイルをajaxで取得することはできませんが、フォームを動的に生成して送信することで実現できます。フォームを生成するための私たちのコメントの議論の通り、あなたはこのようなことをすることができます。

function autoSubmitForm(method, url, post_data) { 
    var element = document.getElementById("virtual_form"); 
    if(element != null) 
    { 
     element.parentNode.removeChild(element); 
    } 
    var form = document.createElement("form"); 
    form.setAttribute("id", "virtual_form"); 
    form.setAttribute("style", "display:none;"); 
    form.method = method; 
    form.action = url; 
    for(i in post_data) 
    { 
     var element=document.createElement("input"); 
     element.value=post_data[i]; 
     element.name=i; 
     form.appendChild(element); 
    } 
    document.body.appendChild(form); 
    form.submit(); 

} 

autoSubmitForm('POST','your_url.php',{id:"xyz",other_input:"input value"}); 

ここで{id:"xyz",other_input:"input value"}は投稿データのオブジェクトで、フィールド名とフィールドの値を動的にペアで定義できます。それを関数に渡してください。

+0

ありがとうございます。私は今それを試してみる –

+0

私は自分のコードから編集した。 :)私の編集を確認してください –

+0

あなたの関数のメソッドとurl引数を無視しています... –