in reply to Re^5: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?
in thread Can two separate responses be sent to the client's browser from Perl, such as via fork{}?

Regarding the first part, AJAX requests do not need refreshing the client page. Just concentrate on a test JS script where you click a button, it does AJAX request to server and presents some results in a div.

Yes, this is exactly the problem. I'm familiar with AJAX, having learned several years ago to use it, rolling my own jQuery-free, no module, Javascript routines for this. The problem is that the http headers for a download are not compatible (as far as I can tell) with sending to a single div on a page--the download wants to BE the page. I have yet to get any download dialogue in the browser through an AJAX-initiated request. The only way I have ever gotten it to work is through standard form submission. I guess I'm just ignorant, because I am quite sure there must be a way to do it, but I can't wrap my mind around how to get the browser to download something sent back to a form element on the page via AJAX. If the others were instructing me in how to accomplish this, I haven't grasped it yet.

Blessings,

~Polyglot~

  • Comment on Re^6: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?

Replies are listed 'Best First'.
Re^7: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?
by bliako (Abbot) on Oct 20, 2023 at 07:05 UTC

    In the JS code in Re^3: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?, this: var blob = new Blob([pdf], {type: "octet/stream"}); creates the blob with the specific download header to go into an <a> tag. You are right, this must be changed to var blob = new Blob([pdf], {type: "application/pdf"});. Then follow the rest on how to create the <a>. Please note: good practice is that when you are done with the download link you must tell the browser to release the blob data it created with window.URL.createObjectURL(blob) like:

    var objurl = window.URL.createObjectURL(blob); ... // i am done with this link now window.URL.revokeObjectURL(objurl);

    So, now your dynamic download link should contain the right headers.