将ajax数据存储到全局变量中

Ale*_*x G 6 jquery

继续使用JQuery - 将ajax响应存储到全局变量中

接受的解决方案不知何故对我不起作用.

$(document).ready(function() {
    var dataStore = (function(){
        var xml;

        $.ajax({
          type: "GET",
          url: "/?do=getcontentadm1n&category=homepage",
          dataType: "json",
          success : function(data) {
                        xml = data.html;
                alert(xml); // WORKS
                    }
        });

        return {getXml : function()
        {
            if (xml) return xml;
        }};
    })();

    var somevar = dataStore.getXml();

    alert(somevar); // UNDEFINED
});
Run Code Online (Sandbox Code Playgroud)

还有其他解决方案吗?

谢谢.

ggr*_*ner 11

它是空的,因为在getXml调用时,ajax请求尚未完成,请记住ajax是异步的.解决它的一种方法是强制它同步:

       $.ajax({
          async: false,
          type: "GET",
          url: "/?do=getcontentadm1n&category=homepage",
          dataType: "json",
          success : function(data) {
                        xml = data.html;
                alert(xml); // WORKS
                    }
        });
Run Code Online (Sandbox Code Playgroud)

回应评论:

我想要执行AJAX onclick,然后将data.html存储为其他鼠标事件

var dataStore = (function(){
    var html;
    function load(){
           $.ajax({
              async: false,
              type: "GET",
              url: "/?do=getcontentadm1n&category=homepage",
              dataType: "json",
              success : function(data) { html = data.html; }
            });
    }
    return {
        load : function() { 
            if(html) return;
            load();
        },
        getHtml: function(){
             if(!html) load();
             return html;
        }
    }
})();

$(element1).click(function(){
    dataStore.load();
});

$(element2).click(function(){
    var html = dataStore.getHtml();
    // use html
});
Run Code Online (Sandbox Code Playgroud)