Функция Jquery.get вызывается бесконечное количество раз при использовании пользовательского заголовка с открытым XMLHttpRequest

#javascript #jquery #ajax #xmlhttprequest

Вопрос:

Я использовал пользовательский заголовок для каждого XMLHttpRequest следующим образом:

 XMLHttpRequest.prototype.newOpen = XMLHttpRequest.prototype.open;

XMLHttpRequest.prototype.open = function(method, url) {
    var customValue = 'custom_value';
    this.newOpen.apply(this, arguments);
    this.setRequestHeader('X-Custom-Headers', customValue);
};
 

После этого я вызываю функцию Get Jquery следующим образом:

 $(function(){
    var file = "location/somefile.csv";

    $.get(file, { "_": $.now() }, function(vals) {
        var csv_arr = $.csv.toArrays(vals);
        console.log(csv_arr);
    }).done(function() {
        alert("SUCCESS");
    }).error(function(err) {
        alert(err.statusText);
    });
})
 

Но эта функция $.get вызывается бесконечное количество раз. Когда я удаляю пользовательский заголовок для всех запросов, это работает.
Я всегда получаю ошибку превышения максимального размера вызова.
Я делаю что-то не так при настройке пользовательского заголовка XMLHttpRequest ?
Или, что является причиной того, что мой $.get() запрос вызывается бесконечное количество раз?
Пожалуйста, помогите.

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

1. Как называется этот твой код? Например, зависит ли это от нажатия кнопки, загрузки страницы и т. Д.?

2. @loan.burger Он вызывается при загрузке страницы. Как вы можете видеть, функция $.get() вызывается в $(функция())

Ответ №1:

Я некоторое время не использовал jQuery, но в зависимости от того, где вы хотите, чтобы весь этот код формировался, например, при нажатии кнопки или изменении опции выбора и т. Д. Попробуйте ввести свой код в функцию namesa, например:

 var csvHelper =
{
   readCsv: function() {
       var file = "location/somefile.csv";

        $.get(file, { "_": $.now() }, function(vals) {
         var csv_arr = $.csv.toArrays(vals);
         console.log(csv_arr);
       }).done(function() {
            alert("SUCCESS");
       }).error(function(err) {
    alert(err.statusText);
       });
   }
}
 

Затем вы вызываете его нажатием кнопки или загрузкой страницы, например:

 csvHelper.readCsv();
 

Пример JSFiddle: https://jsfiddle.net/loanburger/1asngkt9/