【问题标题】:try-catch doesn't work with XMLHTTPRequesttry-catch 不适用于 XMLHTTPRequest
【发布时间】:2012-05-14 13:50:31
【问题描述】:

我正在尝试使用try-catch 语句来处理来自XMLHTTPRequest 的错误,如下所示:

var xhr = new XMLHttpRequest();
xhr.open('POST', someurl, true);
try{
    xhr.sendMultipart(object);
}
catch(err){
    error_handle_function();
}

xhr.sendMultipart 抛出 401 错误时,error_handle_function 未被调用。知道如何解决这个问题吗?

谢谢!

【问题讨论】:

    标签: javascript xmlhttprequest try-catch


    【解决方案1】:

    我认为您无法以这种方式捕获服务器错误。你应该检查状态码:

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange=function() {
        if (xhr.readyState === 4){   //if complete
            if(xhr.status === 200){  //check if "OK" (200)
                //success
            } else {
                error_handle_function(); //otherwise, some other code was returned
            }
        } 
    }
    xhr.open('POST', someurl, true);
    xhr.sendMultipart(object);
    

    【讨论】:

    • 如果您在 Chrome 上安装 Web Server Notifier 并尝试访问 play.google.com,例如,您会看到一个常规的 404 错误,我什至无法阻止之前检查状态代码。知道为什么吗?
    • 第3行,xmlhttp对象从何而来?
    • Chrome 仍然会在控制台中抛出错误,然后调用处理程序。
    【解决方案2】:

    当 xhr.sendMultipart 抛出 401 错误时

    它没有被抛出。它是异步返回的。

    这意味着此代码在响应到达之前完成运行。这就是您的open 调用中的true 的含义。

    您需要注册一个onReadyStateChange 处理程序并在那里处理错误响应。

    【讨论】:

      猜你喜欢
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      • 1970-01-01
      相关资源
      最近更新 更多