为了账号安全,请及时绑定邮箱和手机立即绑定

JQuery - 将ajax响应存储到全局变量中

JQuery - 将ajax响应存储到全局变量中

SMILET 2019-08-26 15:27:16
JQuery - 将ajax响应存储到全局变量中我仍然是jQuery和ajax场景的新手,但我有一个$ .ajax请求执行GET来检索一些XML文件(大约6KB或更少),但是在用户花费在该页面上的持续时间内,XML内容应该是不会/不会改变(这个设计我无法改变,我也无权更改XML文件,因为我正在从其他地方读取它)。因此,我有一个全局变量,我将响应数据存储到其中,并且对此数据的任何后续查找都在此变量上完成,因此不需要进行多个请求。鉴于XML文件可以增加的事实,我不确定这是最佳实践,并且也来自java背景我对全局公共变量的想法通常是禁止的。所以我的问题是,是否有更好的方法可以做到这一点,以及一个问题,如果文件扩展到一些荒谬的文件大小,这是否会导致任何内存问题?我认为数据可以传递到xml对象中的一些getter / setter类型函数,这将解决我的全局公共变量问题,但仍然提出了我是否应该将响应存储在对象本身内的问题。例如,我目前所做的是:// top of codevar 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' objectvar foo = $(xml).find('something').attr('somethingElse');
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

除了存储它之外没有办法解决它。内存分页应该减少那里的潜在问题。

我建议不要使用名为'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');


查看完整回答
反对 回复 2019-08-26
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这对我有用:

var jqxhr = $.ajax({
    type: 'POST',       
    url: "processMe.php",
    data: queryParams,
    dataType: 'html',
    context: document.body,
    global: false,
    async:false,
    success: function(data) {
        return data;
    }
}).responseText;

alert(jqxhr);
// or...
return jqxhr;

重要的是要注意:global: falseasync:false最后responseText链接到$.ajax请求。


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 495 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信