Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript捕获错误_Javascript - Fatal编程技术网

Javascript捕获错误

Javascript捕获错误,javascript,Javascript,我正在使用window.error尝试捕获所有客户端错误 它可以很好地处理Javascript错误,但它不能捕获所有错误,如网络错误或AJAX错误 这是我的代码(我无法使用jQuery,因此无法使用.ajaxError): 结果是: 有人知道在客户端捕获所有错误的方法吗 谢谢可能会钩住默认的请求对象: (function(orig){ window.XMLHttpRequest=function(...args){ var instance=new orig(...args);

我正在使用window.error尝试捕获所有客户端错误

它可以很好地处理Javascript错误,但它不能捕获所有错误,如网络错误或AJAX错误

这是我的代码(我无法使用jQuery,因此无法使用.ajaxError):

结果是:

有人知道在客户端捕获所有错误的方法吗


谢谢

可能会钩住默认的请求对象:

(function(orig){
   window.XMLHttpRequest=function(...args){
    var instance=new orig(...args);
    instance.addEventListener("readyStateChange",function(){
     if(instance.status!==200){
       throw new Error(instance.status+":"+instance.statusText);
     }
    });
  return instance;
 };
})(XMLHttpRequest);

我找到了一条路。这是我的密码。我认为这会捕获所有错误

    // JavaScript Errors
    window.onerror = function(messageOrEvent, source, lineno, colno, error) {
        console.log("Captured: " + messageOrEvent)
    }

    // 404 FILES
    window.addEventListener('error', function(e) {
        console.log(e);
    }, true);

    // AJAX Errors
    var open = window.XMLHttpRequest.prototype.open,
      send = window.XMLHttpRequest.prototype.send;

    function openReplacement(method, url, async, user, password) {
      this._url = url;
      return open.apply(this, arguments);
    }

    function sendReplacement(data) {
      if(this.onreadystatechange) {
        this._onreadystatechange = this.onreadystatechange;
      }
      this.onreadystatechange = onReadyStateChangeReplacement;
      return send.apply(this, arguments);
    }

    function onReadyStateChangeReplacement() {

      // CAPTURE HERE.
      if(this.status != 200){
        console.log(this.responseURL + " " + this.status + " " + this.statusText);
      }

      if(this._onreadystatechange) {
        return this._onreadystatechange.apply(this, arguments);
      }
    }

    window.XMLHttpRequest.prototype.open = openReplacement;
    window.XMLHttpRequest.prototype.send = sendReplacement;

如果ajax调用是正确的,jquery可以执行{error:err=>throw err},我必须全局执行。我不能编辑每个函数。无论如何,谢谢:)可能会覆盖一些XMLHttpRequest.prototype函数。非常感谢。这就是我要找的。在…args中支持什么?@marcos Aguayo与.apply(参数)相同,请查看rest参数
    // JavaScript Errors
    window.onerror = function(messageOrEvent, source, lineno, colno, error) {
        console.log("Captured: " + messageOrEvent)
    }

    // 404 FILES
    window.addEventListener('error', function(e) {
        console.log(e);
    }, true);

    // AJAX Errors
    var open = window.XMLHttpRequest.prototype.open,
      send = window.XMLHttpRequest.prototype.send;

    function openReplacement(method, url, async, user, password) {
      this._url = url;
      return open.apply(this, arguments);
    }

    function sendReplacement(data) {
      if(this.onreadystatechange) {
        this._onreadystatechange = this.onreadystatechange;
      }
      this.onreadystatechange = onReadyStateChangeReplacement;
      return send.apply(this, arguments);
    }

    function onReadyStateChangeReplacement() {

      // CAPTURE HERE.
      if(this.status != 200){
        console.log(this.responseURL + " " + this.status + " " + this.statusText);
      }

      if(this._onreadystatechange) {
        return this._onreadystatechange.apply(this, arguments);
      }
    }

    window.XMLHttpRequest.prototype.open = openReplacement;
    window.XMLHttpRequest.prototype.send = sendReplacement;