首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JQuery -将ajax响应存储到全局变量中

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

Stack Overflow用户
提问于 2009-05-25 04:18:15
回答 14查看 202.1K关注 0票数 68

我仍然是jQuery和ajax场景的新手,但是我有一个$.ajax请求执行GET来检索一些XML文件(大约6KB或更少),但是在用户花费在该页面上的时间内,XML内容不应该/不会改变(这种设计我不能改变,我也没有权限改变XML文件,因为我正在从其他地方读取它)。因此,我有一个全局变量,我将响应数据存储在其中,随后对数据的任何查找都是在这个变量上完成的,因此不需要进行多次请求。

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

所以我的问题是,是否有更好的方法来做到这一点,以及如果文件扩展到某个可笑的文件大小,这是否会导致任何内存问题?

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

举个例子,我现在做的是:

代码语言:javascript
复制
// 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');
EN

回答 14

Stack Overflow用户

回答已采纳

发布于 2009-05-25 04:35:00

除了存储它,没有其他方法可以绕过它。内存分页应该可以减少那里的潜在问题。

我建议不要使用名为'xml‘的全局变量,而要做一些类似这样的事情:

代码语言:javascript
复制
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;
    }};
})();

然后使用以下命令访问它:

代码语言:javascript
复制
$(dataStore.getXml()).find('something').attr('somethingElse');
票数 35
EN

Stack Overflow用户

发布于 2010-08-17 23:17:09

这里有一个函数可以很好地完成这项工作。我无法得到上面的最佳答案。

代码语言:javascript
复制
jQuery.extend({
    getValues: function(url) {
        var result = null;
        $.ajax({
            url: url,
            type: 'get',
            dataType: 'xml',
            async: false,
            success: function(data) {
                result = data;
            }
        });
       return result;
    }
});

然后,要访问它,请像这样创建变量:

代码语言:javascript
复制
var results = $.getValues("url string");
票数 71
EN

Stack Overflow用户

发布于 2011-12-30 21:40:08

这对我很有效:

代码语言:javascript
复制
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请求。

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/905298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档