A quick question of perhaps a more speculative nature. I’ve been getting heavy into jquery lately to handle all the ajax in my web apps.
Right now I’m building a bidding system in PHP that makes heavy use of mod_rewrite. I’m using jQuery with a confirm dialog to send an Ajax request that will spend some of the user’s predeposited credits on a bid. The ajax request to spend is sent with the cost as a post parameter to a PHP controller that spends the users credits and then echos the output, which jQuery then places back into the document.
It’s working fine, but what I’m wondering is if there is a better way to make jQuery handle the refusal of the purchase if the user has insufficient credits. Right now I have the php answering with an echo that displays this message with a link to the make a deposit page… but I’d rather have a redirect happen automatically.
Is there some way my jQuery script could be notified with the boolean of success or failure before .load finishes, and then redirect in the case of failure? Possibly through HTTP headers determining the handling? The only way I could think of is to place a true or false in an html element that gets check in the callback after .load() and in the case of a false perform a redirect.
Thanks and sorry for the explanation length.
Use the lower level
$.ajaxcall to have full maximum control over the request. Ideally, instead of sending a success 2xx response, send an error response which will automatically get sent to your error callback.From the server, send the success response as you are doing right now. However for errors, change the response header, and send a JSON object or plain text indicating what the error was. And there is a header for exactly what you are looking for. It’s
402 - Payment Required🙂send a JSON object as response with more details:
For the updated comment, you need to use a closure (better than global variables 🙂
Suppose the outer function gets the element name/ID, wraps that value through a closure in the success callback. Please let me know if this is not what you intended.