Я столкнулся с проблемой, которая сбивает меня с толку. При подключении к базе данных через 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
Я должен сказать, что я в растерянности относительно того, что происходит. Не могли бы вы предложить подход для устранения этой проблемы, или вы видите что-нибудь очевидное, что могло бы вызвать это странное поведение?