How can I throw an exception on my server and have the exception's message be read in JavaScript (I'm using AJAX with jQuery). My server environment is Google App Engine (Python).
Here's my server code:
def post(self):
answer_text = util.escapeText(self.request.get("answer"))
# Validation
if ( len(str(answer_text)) < 3):
raise Exception("Answer text must be at least 2 characters long.")
return
And her开发者_如何学JAVAe's the AJAX request:
$.ajax({
type: "POST",
url: "/store_answer.html",
data: "question_id=" + question_id +"&answer="+answer,
success: function(responseText){
handleSuccessfulAnswer(question_id);
},
error: function(responseText){
// TODO: How to get the exception message here???
alert("???????????");
},
complete: function(data) {
submitCompleted(submitName, "Submit");
}
});
Thanks!
If you have debug=True
in your WSGI app configuration, the stack trace from your exception will get populated to the HTTP response body, and you can parse your message out of the stack trace client side.
Don't do this, though. It's insecure, and a bad design choice. For predictable, recoverable error conditions, you should either be catching the exception or not throwing one at all, e.g.:
if ( len(str(answer_text)) < 3):
self.error(500)
self.response.out.write("Answer text must be at least 2 characters long.")
return
On the server, you need to catch the exception in a try/except block and turn it into a proper HTTP error (with code 500, generic server error, if a server error is what's happened -- 3xx if the problem is with the request, &c -- see here for all the HTTP status codes) with the Response
's set_status method.
精彩评论