2017-06-22 62 views
1

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

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 Uncaught TypeError: Cannot read property 'length' of undefined at Function.each (jquery-latest.min.js:2) at Object. (dr:112) at Function.each (jquery-latest.min.js:2) at Object. (dr:108) at Object. (jquery-latest.min.js:2) at j (jquery-latest.min.js:2) at Object.fireWith [as resolveWith] (jquery-latest.min.js:2) at x (jquery-latest.min.js:4) at XMLHttpRequest.b (jquery-latest.min.js:4)`

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

+0

你收到控制台任何错误? – 31piy

+0

嗯,我使用000Webhost在开发过程中托管我的网站,我不确定如何查看控制台 –

+2

在浏览器中按F12,或者右键单击某个元素并单击'检查' –

回答

1

好的,原因是:当你使用then时,你在成功函数中声明的参数不是数据本身,而是一个包含数据,状态字符串和XHR对象的数组。所以你的情况maindata得到[Object, "success", Object]。 替换为这部分代码如下,它应该工作(additionnally,也许应该有一个支票上的状态做获取数据前):

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

非常感谢您的帮助! –