加载外部JSON一次,重复使用....?

时间:2016-05-07 23:58:16

标签: jquery ajax scope

当我的页面加载时,我想立即使用$ .ajax()从另一台服务器中提取JSON数据,我希望能够访问所有数据,而无需重新请求json文件。问题是,当我将数据分配给变量时,该变量的范围仅限于$ .ajax()函数,我无法在其他地方访问...

似乎因为我已经加载了这些信息,所以我应该能够多次使用它,而不必一遍又一遍地重复请求它(慢)。使用简单的reddit.json请求,例如下面的

$(document).ready(function(){   
    $.ajax({
        type: "GET",
        url: 'https://www.reddit.com/.json',
        timeout:3000,
        dataType: 'JSON',
        jsonpCallback: 'callback',
        success: function(data) {
            console.log(data);
            var myData = data;  //this variable is confined :(
        },
        error: function(){
            console.log('error');
        }
    });
});

如果我在document.ready()的外面运行它,那么我可以全局到达它,但我不知道这是不是很酷,或者像最佳实践,你知道......

什么是最佳方式来访问已经加载的json对象,该对象超出了作出初始请求的函数范围?或者甚至可能......?

2 个答案:

答案 0 :(得分:0)

使用ajax加载所有内容然后您可以将其写入文件或将其放入可从任何地方访问的全局数组

答案 1 :(得分:0)

您可以使用以下两个选项中的任何一个。

1.在$(document).ready()函数之前声明一个全局变量。然后在下面使用它。

<script>
var myData;
$(document).ready(function(){   
 $.ajax({
    type: "GET",
    url: 'https://www.reddit.com/.json',
    timeout:3000,
    dataType: 'JSON',
    jsonpCallback: 'callback',
    success: function(data) {
        console.log(data);
        myData = data;  //this variable is confined :(
    },
    error: function(){
        console.log('error');
    }
});
});
</script>

2.根据您的要求,将您的数据存放在HTML5会话存储或本地存储中。如下所示。

<script>
$(document).ready(function(){   
 $.ajax({
    type: "GET",
    url: 'https://www.reddit.com/.json',
    timeout:3000,
    dataType: 'JSON',
    jsonpCallback: 'callback',
    success: function(data) {
        console.log(data);
        sessionStorage.myData=data;  //setting variable in session storage
        console.log(sessionStorage.myData); // getting variable from ss
        // for local storage replace sessionStorage with localStorage in above two lines
    },
    error: function(){
        console.log('error');
    }
});
});
</script>