Как перехватить http-запрос, если в каком-то случае я также устанавливаю заголовок

#javascript #ajax #http #xmlhttprequest

#javascript #ajax #http #xmlhttprequest

Вопрос:

Я перехватываю все ajax-запросы, используя следующий код:

 (function (open) {
        XMLHttpRequest.prototype.open = function (method, url, async, user, pass) {
            var shdOrNt=onlyUrls?regDta.test("" url.toLowerCase()):(!regDta.test("" url.toLowerCase()));
            if(shdOrNt) {
                if("" url.indexOf(usrDtaUrl)!=-1){
                    localStorage.setItem("usrDta",JSON.stringify(this.responseText))
                }else {
                    this.addEventListener("readystatechange", function () {
                        if (this.readyState == 4) {
                            var response = this.responseText;
                            var absurl=url.split("?")[0];
                            jQuery.ajax({
                                url: "http://localhost:8082/akhilLog/getHttpLog",
                                type: "PUT",
                                data: {
                                    "location": {
                                        "origin": location.origin,
                                        "pathname": location.pathname,
                                        "hash": location.hash
                                    },
                                    "myIpJson": myIpJson,
                                    "clientTime": new Date(),
                                    "data": {
                                        method, url, async, user, pass, response, absurl
                                    }
                                },
                                success: function (result, err) {
                                    if (err) {
                                        console.log(err);
                                    }
                                }
                            });
                        }
                    }, false);
                }
                open.call(this, method, url, async, user, pass);
            }
        };

    })(XMLHttpRequest.prototype.open);
  

Он работает нормально, но в какой-то части моего кода я (и некоторые библиотеки) устанавливаю заголовок запроса после вызова open

Таким образом, он выдает следующую ошибку:

 vendor.min.js:38 Error: Failed to execute 'setRequestHeader' on 'XMLHttpRequest': The object's state must be OPENED.
    at Error (native)
    at http://localhost:5000/static/requireStr/index/vendor.min.js:38:1203
    at q (http://localhost:5000/static/requireStr/index/vendor.min.js:36:17012)
    at http://localhost:5000/static/requireStr/index/vendor.min.js:38:1177
    at n (http://localhost:5000/static/requireStr/index/vendor.min.js:37:31452)
    at http://localhost:5000/static/requireStr/index/vendor.min.js:37:30145
    at http://localhost:5000/static/requireStr/index/vendor.min.js:38:15597
    at m.$eval (http://localhost:5000/static/requireStr/index/vendor.min.js:38:23059)
    at m.$digest (http://localhost:5000/static/requireStr/index/vendor.min.js:38:21607)
    at m.$apply (http://localhost:5000/static/requireStr/index/vendor.min.js:38:23353) undefined(anonymous function) @ vendor.min.js:38(anonymous function) @ vendor.min.js:37(anonymous function) @ vendor.min.js:1(anonymous function) @ vendor.min.js:38$eval @ vendor.min.js:38$digest @ vendor.min.js:38$apply @ vendor.min.js:38l @ vendor.min.js:37J @ vendor.min.js:38t.onload @ vendor.min.js:38
vendor.min.js:38 TypeError: Cannot read property 'url' of undefined
    at responseError (http://localhost:5000/static/requireStr/index/app.min.js:1:30240)
    at http://localhost:5000/static/requireStr/index/vendor.min.js:38:15597
    at m.$eval (http://localhost:5000/static/requireStr/index/vendor.min.js:38:23059)
    at m.$digest (http://localhost:5000/static/requireStr/index/vendor.min.js:38:21607)
    at m.$apply (http://localhost:5000/static/requireStr/index/vendor.min.js:38:23353)
    at l (http://localhost:5000/static/requireStr/index/vendor.min.js:37:30709)
    at J (http://localhost:5000/static/requireStr/index/vendor.min.js:38:915)
    at XMLHttpRequest.t.onload (http://localhost:5000/static/requireStr/index/vendor.min.js:38:1389) undefined(anonymous function) @ vendor.min.js:38(anonymous function) @ vendor.min.js:37(anonymous function) @ vendor.min.js:1(anonymous function) @ vendor.min.js:38$eval @ vendor.min.js:38$digest @ vendor.min.js:38$apply @ vendor.min.js:38l @ vendor.min.js:37J @ vendor.min.js:38t.onload @ vendor.min.js:38
  

Итак, я немного запутался, как решить проблему?

Комментарии:

1. Зачем вам менять собственный XMLHttpRequest.prototype.open , который jQuery использует для выполнения базовых ajax-запросов, на что-то странное с вашими собственными аргументами и вложенным вызовом jQuery ajax? То, что вы делаете, уничтожает jQuery $.ajax

2. Я хочу регистрировать все запросы ajax в некоторой базе данных..