JQuery.when多个JSON变量

时间:2017-06-22 09:02:05

标签: jquery json getjson when-js

我有这个代码,它使用来自2个URL的$.getJSON()检索JSON,并将结果保存为变量。然后,我使用$.when()then()从这些变量中获取数据。但是,这只适用于我一次执行一个,每个都使用它自己的$.when(),并且当我同时使用它们时不起作用。

var player = $.getJSON("http://api.hivemc.com/v1/player/" + $user + "/timv");
        var game = $.getJSON("http://api.hivemc.com/v1/game/timv");

        $.when(player,game).then(function(maindata, data){
            $('#1').text(maindata.total_points);
            $('#2').text(maindata.i_points);
            $('#3').text(maindata.t_points);
            $('#4').text(maindata.d_points);
            $('#5').text(maindata.role_points);
            $('#6').text(maindata.most_points);

            if(maindata.detectivebook == true)
                $('#7').text("Yes");
            else
                $('#7').text("No");

            $flare = maindata.active_flareupgrade;
            $flare = $flare.charAt(0).toUpperCase() + $flare.slice(1).toLowerCase();
            $('#8').text($flare);
            $('#9').text(maindata.title);
            var d = new Date(maindata.lastlogin * 1000);
            var n = d.toISOString(); 
            $('#10').text(d.getDate() + "/" + d.getMonth() + "/" + d.getFullYear());
        });

我得到的控制台错误是:

  

jquery-latest.min.js:2未捕获的TypeError:无法读取属性' length'的      未定义      在Function.each(jquery-latest.min.js:2)      在对象。 (DR:112)      在Function.each(jquery-latest.min.js:2)      在对象。 (DR:108)      在对象。 (jquery的-latest.min.js:2)      在j(jquery-latest.min.js:2)      at Object.fireWith [as resolveWith](jquery-latest.min.js:2)      at x(jquery-latest.min.js:4)      在XMLHttpRequest.b(jquery-latest.min.js:4)`

谁能告诉我我做错了什么?感谢。

1 个答案:

答案 0 :(得分:1)

好的原因是:当你使用then时,你在成功函数中声明的参数不是数据本身,而是包含数据,状态字符串和XHR对象的数组。因此,在您的情况下maindata获取[Object, "success", Object]。 用以下代码替换这部分代码,它应该可以工作(另外,在获取数据之前可能应该检查状态):

$.when(player,game).then(function(mainresponse, response){
    var maindata = mainresponse[0];
    var data = response[0];