In this scenario:
I cannot come up with an approach other than to use async: false
in the jQuery ajax
call, which is strongly discouraged:
Setting this option to false (and thus making the call no longer asynchronous) is strongly discouraged, as it can cause the browser to become unresponsive.
I've tried:
What I've settled on is what I've described above: in the click handler, do a synchronous server call, and if the server says to do so, open a new window. Popup blockers are happy with this, because the window opening is done in the click handler. But...
Similar (but not duplicate, as I don't always want to open a new window) questions that have not provided a nice solution:
I tried out my 'unpleasant' idea: to always open a new window, and have that new window make the server call, closing itself if the results of the server call dictated that it was not required.
But that was pretty horrible, so I stuck with the synchronous call.
So for me, the answer to this question is no, you can't avoid being synchronous in this situation.