in reply to Re^4: 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{}?

Polyglot

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. Start from there. An important part of this is server-side: sending JSON back to client on an AJAX request. Once you get the individual components working all will fit together niecely. A WORD OF WARNING: obvioulsy the proper way is to hava the server queueing the client requests, processing them at its own time and notifying the clients (via an email, or via the client checking on the server, perhaps via a client-page timed-auto-refresh (see Re: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?) etc.) when results are ready. This is what afoken and fletch are telling you.

regarding LaTeX::Driver, it can run XeLaTeX too if you pass this parameter: 'format' => 'pdf(xelatex)' at construction time. There are options to specify the bin path.

bw, bliako

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

Replies are listed 'Best First'.
Re^6: Can two separate responses be sent to the client's browser from Perl, such as via fork{}?
by Polyglot (Chaplain) on Oct 20, 2023 at 00:58 UTC
    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~

      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.