Случайный пустой ответ на запрос от AJAX, вызывающий JSON-анализатор - PullRequest
0 голосов
/ 25 августа 2018

Я столкнулся с проблемой, которая сбивает меня с толку. При подключении к базе данных через JJ-запрос AJAX иногда (случайным образом) он возвращает пустую строку XML вместо ожидаемого JSON. Функция JavaScript приведена ниже:

function MyFunction(location_list){

var dictTable = {}
for (n in location_list) {
    var restRequestURL = '/geoserver/rest/api/v1/locations/'+location_list[n];
    $.ajax({
        url : restRequestURL,
        dataType: "json",
        data: {},
        tryCount : 0,  // Tried this as a workaround
        retryLimit : 3,  // Tried this as a workaround
        success: function(response){
            dictTable[response.typeString] = anotherFunction(response);
            if (Object.keys(dictTable).length == location_list.length) {
                yetAnotherFunction(dictTable, location_list);
            }
        },
        error: function(xhr, textStatus, errorThrown ) {
                    // Brute force workaround
                    console.log(textStatus);
                    if (textStatus == "parsererror") {
                        this.tryCount++;
                        if (this.tryCount <= this.retryLimit) {
                            //try again
                            $.ajax(this);
                            return;
                        }
                        return;
                    }
                    if (xhr.status == 500) {
                        console.log("Server Error 500...");
                    } else {
                        console.log(xhr.status);
                    }
                }
    })
}
}

JSON корректно возвращается в большинстве запросов, и все идет как ожидалось (еще одна функция и еще одна функция сработали). Но в некоторых не очень редких случаях (1 из 10 или около того) запрос возвращает пустой объект XML вместо ожидаемого JSON.

Следовательно, вызов AJAX завершается ошибкой «parsererror», так как он ожидает JSON, но получает пустой XML. Итак, все мои запросы возвращаются с успешным кодом (200, состояние ОК), но ответ иногда неверен, как будто у базы данных не было времени, чтобы ответить или перепутать вещи, и просто сказал «что угодно, вот и все» .

Ошибка объекта данных:

{
  "readyState": 4,
  "responseText": "",
  "status": 200,
  "statusText": "OK"
}

Вкладка «Сеть» из консоли разработчика Firefox (Файл 120 - это конкретный запрос, который в этом случае дважды обрабатывается с обходным путем):

Status   Method   File  Domain  Cause  Type  Transferred  Size
200       GET     120   domain   xhr    xml    145 B      0 B
200       GET     120   domain   xhr   json    1.08 KB   2.77 KB   

Я должен сказать, что я в растерянности относительно того, что происходит. Не могли бы вы предложить подход для устранения этой проблемы, или вы видите что-нибудь очевидное, что могло бы вызвать это странное поведение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...