我遇到一个困扰我的问题。通过AJAX JSON请求连接数据库时,有时(随机)会返回一个空的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,并且一切都按预期进行(触发了otherFunction和yetAnotherFunction)。但是在某些情况下(十分之一),请求将返回一个空XML对象,而不是预期的JSON。
因此,AJAX调用由于“ parsererror”而失败,因为它期望使用JSON但得到一个空的XML。因此,我所有的请求都返回一个成功的代码(200,状态为OK),但是响应有时是不正确的,好像数据库没有时间响应或混淆了所有事情,只是说“无论如何,您都可以在这里”
错误数据对象:
{
"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
我必须说,我对所发生的事情不知所措。您是否可以建议一种方法来解决此问题,或者是否看到任何明显的原因会导致这种奇怪的行为?