0

我想做的是捕捉所有错误并自己处理。

但是当 jQuery.ajax() 发生错误时,我可以知道错误选项是否出错。但是我的 window.onerror 事件无法捕捉到它。

window.onerror = function(e) {
    console.log("i was here! ERROR: ", e);
    console.log("-----------");
    return true; //dont show errors on console
}

$(function() {

    $.ajax({
        url: "asdasdasd/as/da/sdtest/asdasd",
        error: function() {
            // ok i know here is an error and it catches on my window.onerror. BUT look at your console, still have a GET error. That error I want to handle. Can be with try/catch or inside the window.onerror. I want that Exception object. Not this one that I created.
            throw new Error("it catches, but still have errors on my console");
        }
    });

    test[0].test = "it fails";

});

你可以在这里测试:http: //jsfiddle.net/uHPXm/4/

4

2 回答 2

0

文档.onerror

运行时脚本错误的事件处理程序。

在您的情况下,脚本中没有运行时错误。脚本没问题,但请求中有一些错误。基本上,不会抛出任何异常。在 jQuery 内部会有这样的东西(它不是完全来自 jquery 代码,但它会很相似):

xmlhttp.onreadystatechange=function(){
  if (xmlhttp.readyState != 4) return

  if (xmlhttp.status == 200) {
      // Everything is ок
      ...
      alert(xmlhttp.responseText);
      ...
  } else {
      handleError(xmlhttp.statusText) // Something went wrong, error handler called
  }
}

xmlhttp.send();


function handleError(message) {
      alert("Error: "+message)
}

基本上,404 对浏览器来说也不例外。

您可以尝试查看jQuery.ajaxError 它将捕获 ajax 请求中发生的所有错误。

同时它可能会抛出一个错误,window.onerror如果你设置它会被捕获$.ajax({... dataType:'json'...})并会得到一个 HTML 作为响应(解析响应时会发生错误)

于 2012-11-08T20:11:06.967 回答
0

错误函数接受三个参数,error(jqXHR, textStatus, errorThrown)

jqXHR 是 XMLHTTPRequest 对象,textStatus 是字符串,例如timeoutor abort,errorThrown 是原始错误消息,例如未找到或内部服务器错误。

如果您愿意,您可以阅读文档并前往该部分并阅读更多内容。error

于 2012-11-08T20:10:11.977 回答