我在我的站点中使用了一个进行 AJAX 调用的函数。它返回一个包含在 javascript 函数中的 JSON 字符串,同时使用 JSONP 跨域获取我需要的数据。JSON 字符串非常大,大约 1MB 大小。我遇到的问题是,我注意到每次调用我的内存都会增加大约 1MB。发生的事情是超时,在 IE9 中,我收到一条错误消息,指出它“内存不足”。我该如何防止这种情况发生?
这是我使用 Chrome 使用 Memory Timeline 拍摄的内存使用情况随时间变化的图片。
我很好奇我收到的每个 JSON 数据的回调函数是否在 DOM 中堆叠,而不是完全替换它?有没有办法确保我首先从 DOM 中删除旧的回调函数 JSON 数据,然后调用 API 以获取填充 JSON 数据的新回调函数?
我在我的 HTML 中使用以下命令启动该函数:
setTimeout(grabParature, 10000);
这是被调用的函数(由于明显的原因省略了标记):
function grabParature() {
var url = "https://s3.parature.com/api/v1/5406/5426/Ticket";
$.ajax({
url: url,
type: "GET",
dataType: "jsonp",
cache: true,
jsonp : "_callback_=",
jsonpCallback: "theData",
data: {
"_status_type_": "open",
"_pageSize_" : "500",
"_output_" : "javascript",
"_token_" : "#####################"
},
success: function (results) {
var openTickets = 0;
var newTickets = 0;
var atschoolTickets = 0;
var hardwareTickets = 0;
var softwareTickets = 0;
var networkTickets = 0;
console.log(results);
for(var i = 0; i < results.Entities.Ticket.length; i++)
{
var queue = "";
var status = results.Entities.Ticket[i].Ticket_Status.Status.Name["#text"];
if (results.Entities.Ticket[i].Ticket_Queue != undefined) {
queue = results.Entities.Ticket[i].Ticket_Queue.Queue.Name["#text"];
}
if (status === "Open") {
openTickets++;
}
else if (status === "New") {
newTickets++;
}
if (queue === "Hardware") {
hardwaretickets++;
}
else if (queue === "Atschool") {
atschoolTickets++;
}
else if (queue === "Network") {
networkTickets++;
}
else if (queue === "Software") {
softwareTickets++;
}
}
$('#span_openTickets').html(openTickets);
$('#span_newTickets').html(newTickets);
$('#span_hardwareTickets').html(hardwareTickets);
$('#span_atschoolTickets').html(atschoolTickets);
$('#span_networkTickets').html(networkTickets);
$('#span_softwareTickets').html(softwareTickets);
results = null;
}
});
};