【问题标题】:Throwing exception in Python and reading the message in jQuery在 Python 中抛出异常并在 jQuery 中读取消息
【发布时间】:2010-08-12 02:54:35
【问题描述】:

如何在我的服务器上引发异常并在 JavaScript 中读取异常消息(我正在使用 AJAX 和 jQuery)。我的服务器环境是 Google App Engine (Python)。

这是我的服务器代码:

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

这是 AJAX 请求:

$.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");
    }
});

谢谢!

【问题讨论】:

    标签: jquery python ajax google-app-engine


    【解决方案1】:

    如果您的 WSGI 应用配置中有 debug=True,则异常的堆栈跟踪将填充到 HTTP 响应正文中,您可以从堆栈跟踪客户端解析您的消息。

    不过,不要这样做。这是不安全的,也是一个糟糕的设计选择。对于可预测、可恢复的错误情况,您应该捕获异常或根本不抛出异常,例如:

    if ( len(str(answer_text)) < 3):
        self.error(500)
        self.response.out.write("Answer text must be at least 2 characters long.")
        return
    

    【讨论】:

    • Alex 建议的 self.response.set_status(500, "Answer text must be...") 会实现同样的效果吗?哪种方法更好?
    • @Saxon 传递给 set_status 的字符串是 HTTP 状态字符串,它不会出现在响应的正文中,所以放错误消息的地方是错误的。
    • @Nick:啊,我明白了,谢谢。如果 javascript 使用 xhr.statusText 和 set_status() 方法或 xhr.responseText 和 out.write() 方法,它的工作原理是否相同(这是对 Alex 在他的评论中提到的问题的前两个回答 - @987654321 @)?还是一种选择通常比另一种更好?
    • 我通常会避免尝试通过 HTTP 状态发送特定于应用程序的消息 - 而是在正文中发送它们。
    • 感谢您的讨论,你们真的帮助我了解了 XmlHttlRequest 对象
    【解决方案2】:

    在服务器上,您需要在 try/except 块中捕获异常并将其转换为适当的 HTTP 错误(代码为 500,一般服务器错误,如果发生了服务器错误 - 3xx,如果问题是使用请求,&c -- 请参阅 here 了解所有 HTTP 状态代码)使用 Responseset_status 方法。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多