JQuery.when 多个 JSON 变量
JQuery.when multiple JSON variables
我有这段代码使用 $.getJSON()
从 2 个 URL 检索 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 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)`
谁能告诉我我做错了什么?谢谢。
好的,原因如下:当您使用then
时,您在成功函数中声明的参数不是数据本身,而是包含数据、状态字符串和XHR 对象的数组。所以在你的情况下 maindata
得到 [Object, "success", Object]
。
用以下代码替换这部分代码,它应该可以工作(另外,也许应该在获取数据之前检查状态):
$.when(player,game).then(function(mainresponse, response){
var maindata = mainresponse[0];
var data = response[0];
我有这段代码使用 $.getJSON()
从 2 个 URL 检索 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 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)`
谁能告诉我我做错了什么?谢谢。
好的,原因如下:当您使用then
时,您在成功函数中声明的参数不是数据本身,而是包含数据、状态字符串和XHR 对象的数组。所以在你的情况下 maindata
得到 [Object, "success", Object]
。
用以下代码替换这部分代码,它应该可以工作(另外,也许应该在获取数据之前检查状态):
$.when(player,game).then(function(mainresponse, response){
var maindata = mainresponse[0];
var data = response[0];