小编典典

jQuery-将Ajax响应存储到全局变量中

ajax

我仍然是jQuery和ajax领域的新手,但是我有一个$
.ajax请求,执行GET来检索一些XML文件(〜6KB或更少),但是在用户花那个页面的时间内,XML内容应该不会/不会更改(此设计我无法更改,在我从其他地方读取XML文件时也无权更改它)。因此,我有一个全局变量将响应数据存储到该变量中,并且对该数据进行的所有后续查询都将在此变量上进行,因此不需要进行多个请求。

考虑到XML文件可以增加的事实,我不确定这是最佳实践,而且还来自Java背景,因此我对全局公共变量的想法通常是不可以的。

因此,我的问题是,是否可能有更好的方法来解决这个问题,以及如果文件扩展到某个可笑的文件大小,是否会引起任何内存问题?

我认为数据可以传递到xml对象内部的一些getter /
setter类型函数中,这可以解决我的全局公共变量问题,但仍然引发了一个问题,即我是否应该将响应存储在对象内部。

例如,我目前正在做的是:

// top of code
var xml;
// get the file
$.ajax({
  type: "GET",
  url: "test.xml",
  dataType: "xml",
  success : function(data) {
    xml = data;
  }
});
// at a later stage do something with the 'xml' object
var foo = $(xml).find('something').attr('somethingElse');

阅读 326

收藏
2020-07-26

共1个答案

小编典典

除了存储它,别无他法。内存分页应减少那里的潜在问题。

我建议不要使用名为“ xml”的全局变量,而应执行以下操作:

var dataStore = (function(){
    var xml;

    $.ajax({
      type: "GET",
      url: "test.xml",
      dataType: "xml",
      success : function(data) {
                    xml = data;
                }
    });

    return {getXml : function()
    {
        if (xml) return xml;
        // else show some error that it isn't loaded yet;
    }};
})();

然后使用:

$(dataStore.getXml()).find('something').attr('somethingElse');
2020-07-26