【问题标题】:Dojo error handling in ajax methodsajax 方法中的 Dojo 错误处理
【发布时间】:2011-12-18 17:57:12
【问题描述】:

什么情况下会调用xhr方法的error?即使响应为 200,也会调用错误代码。我正在使用 xhrPost 方法。

更新:

dojo.xhrPost({
url: url,
handleAs: respType /* json */,
content: data,
load: onServerResponse,
error: onHttpError
})
function onServerResponse(response, ioArgs) {
    if(onResponse !== null) {
        onResponse(response);
    }
}
function onHttpError(error, ioArgs) {
    if (showHttpError === true) {
        var errMsg = "";
        switch (ioArgs.xhr.status) {
            case 0: errMsg = "Please check Web Server status."; break;
            case 404: errMsg = "HTTP (404): Requested Page Not Found"; break;
            case 500: errMsg = "HTTP (500): The server reported an Error"; break;
            default: errMsg = "Unhandled HTTP error - " + ioArgs.xhr.status;
        }
        ConsoleUtils.showNotificationAlertDialog(errMsg, ConsoleConstants.INFORMATION);
    }
}

这些是来自 Firebug 的响应标头:

服务器 Apache-Coyote/1.1 内容类型 application/json;charset=UTF-8 传输编码分块 日期 2011 年 12 月 18 日星期日 18:06:54 GMT

响应正文 {"message":"Kiosk 已成功删除","success":true}

尽管返回状态为 200,但仍会调用警报对话框。

【问题讨论】:

  • 感谢您的信息。我已经用代码 sn-ps 和 firebug 内容更新了我的问题。
  • 你能发布你的 onResponse 方法吗?
  • 检查你的onServerResponse方法没有抛出错误。
  • 我猜错误出现在前 200 个状态之后...当您调用 onResponse(response);

标签: dojo


【解决方案1】:

在您的 onServerResponse 函数中,您使用一个名为 onResponse 的 var。 既然你在做: onResponse() 我只能猜测 onResponse 是一个函数。 那么您的测试 if(onResponse !== null) 似乎不合适,也许您想测试响应。

如果您想测试函数是否存在,您可能需要检查 typeof onResponse == "function"

另外,如果您在其中调用函数,请确保该函数在正确的范围内... 然后您可能想要使用负载:dojo.hitch(theScopeWhereOnResponseFunctionExists, onServerResponse)

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我只是与这个问题斗争了一段时间并找到了解释。

    如果你的 xhrget 返回一个 200,但是 load 函数抛出了一个未处理的异常,dojo 会将此视为错误并调用错误函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-28
      • 2013-06-26
      • 2012-07-20
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2013-05-19
      • 2012-02-25
      相关资源
      最近更新 更多