2017-12-19 17 views
0

使用したAJAXで印刷するページにスクリプトを書き込みました。私はこのたわごとと3日間戦っているが、私はそれが何であるのか分からない。AJAXは、.print()関数を使用すると空のページを返します。

空白のページを生成して手動で印刷するとOKです。

私は空白のページを生成し、スクリプトで.print()関数を使ってそれを印刷すると、空白のページを返します。

どういうところが間違っていますか?

$.post({ 
    type: "POST", 
    url: "create.php", 
    data: {pid: pid, price: price, contractor: contractor, netto: netto, brutto: brutto, delivery: delivery, amount: amount}, 
}).done(function() { 
    $.post({ 
     type: "POST", 
     url: "generate.php", 
     data: {pid: pid}, 
    }).done(function(data) { 
     printPage = window.open(''); 
     printPage.document.writeln('<html><head><link rel="stylesheet" type="text/css" href="offer.css" /></head><body>' +data+ '</body></html>'); 
     printPage.document.close(); 
     printPage.focus(); 
     printPage.print(); 
     printPage.close(); 
    }); 
}); 
+0

console.log(data)に何か表示されていますか? –

+0

print()関数を削除し、新しい空白のウィンドウでデータを開くと、通常のコンテンツが表示されます。印刷に問題があります。私はいつも空のページを見る。 – sauero

答えて

1

私はちょうど行動をシミュレートしようとしましたが、あなたは正しいです。それは空のページを印刷します。この理由は、ページがレンダリングされる前にprint()を実行しているということです。

あなたは

setTimeout(function(){ 
    printPage.print(); 
    printPage.close(); 
}, 2000); 

printPage.print(); 
printPage.close(); 

交換する場合は、内容を印刷します。私は個人的にはsetTimeoutのような解決策が嫌いですが、これはコードの何が間違っているかを説明するためのものです。

+0

より良い方法でロードした後にページを印刷する方法はありますか? – sauero

+0

まあ、あなたはwindow.open( 'generate.php?pid =' + pid、 '_blank')でgenerate.php全体を置き換えることができ、PHPではページをレンダリングしてドキュメント準備完了イベントの中にprintステートメントを追加することができます。 –

関連する問題