2016-04-03 17 views
0

ajaxを使用して大量のデータをURL(例:/ generate-pdf)に投稿する必要があります。 サーバーは、生成されたレポートをPDF形式(ファイルではなくストリーム)で返します。 新しいウィンドウを開いてコンテンツを表示する方法を教えてください。 GETリクエストの場合 が、それは以下を実行することと同じくらい簡単です。URLに投稿して新しいウィンドウを開いてpdfの応答を表示するには

<a href="/generate-pdf?from=xxxx-xx-xx&to=yyyy-yy-yy" target="_blank" >Report from x to y</a>

しかし、私は、サーバーに送信されるため、データのサイズのPOSTを行う必要があります。おかげさまで

+0

参照してください:[提出フォームに新しいウィンドウを開く方法](http://stackoverflow.com/questions/896724/ハウツー・オープン・ア・ニュー・ウィンドウ・オン・フォーム提出)と[フォーム提出のようなJavaScript投稿要求](http://stackoverflow.com/questions/133925/javascript-post-request-like-a -form-submit?rq = 1) – Roberto

+0

@Roberto、ポインタありがとう。 Form要素のtarget属性(あなたが参照した投稿に示唆されているように)を使用して、私のために働いて以来、私は答えとして投稿しようとしています。 – Kola

答えて

0

これは私がやってしまったものです:

function generatePdf(){ 
 
\t var target = document.getElementById('box-1'); 
 
\t var spinner = new Spinner(opts).spin(target); 
 
\t var tree = $("#tree_container").fancytree("getTree"); 
 
\t var selectedNodes = tree.getSelectedNodes(true) 
 
\t var inputs = ''; 
 
\t $('#report_card_gen_form').remove();//remove any form that might have been created from previous request 
 
\t var selectedMarkingPeriod = $("#marking_period_selector option:selected"); 
 
\t if(selectedMarkingPeriod.val() == -1){ 
 
\t \t inputs += '<input type="hidden" name="school_year_id" value="' + selectedMarkingPeriod[0].dataset.syId + '">'; 
 
\t } 
 
\t else{ 
 
\t \t inputs += '<input type="hidden" name="marking_period_id" value="' + selectedMarkingPeriod.val() + '">'; 
 
\t } 
 
\t for(var index = 0; index < selectedNodes.length; index++){ 
 
\t \t inputs += '<input type="hidden" name="studentIds[]" value="' + selectedNodes[index].data.id + '">'; 
 
\t \t //form.append(selectedNodes[index].data.nodeType + '[]', selectedNodes[index].data.id); 
 
\t } 
 
\t console.log('form data'); 
 
\t console.log($(inputs)); 
 
\t 
 
\t $('body').append('<form action="/grades/report-cards" method="POST" name="report_card_gen_form" id="report_card_gen_form" target="_blank">' + inputs + '</form>'); 
 
\t $('#report_card_gen_form').submit(); 
 
\t spinner.stop(); 
 
}

0

新しいウィンドウを開くと、そのウィンドウにリクエストが送信されます。

あなたは、どのpdfが要求されているかに関する情報を入手し、そのpdfを持つサーバーからページを読み込む必要があります。

役立ちますか?

+0

ありがとうございますが、それは助けにはなりません。私はすでに、非常に特殊なケースでは単純なGETがそのトリックを行うときにそれをやっています。しかし、問題のステートメントで述べたように、サーバーに送信されるデータの量がGET要求の許容量を超えてしまうため、POSTを行う必要があります。 – Kola

+0

はい、しかし私はあなたが望むものが可能だとは思わない...私はURLを取得するよりもむしろ、非同期投稿を作成し、pdfを返すと新しいウィンドウで開きます。理にかなっている? – atefth

+0

例を挙げることはできますか? – Kola

関連する問題