我有一些正在运行的ajax代码。在第一个实例中,我使用$ .when,在第二个实例中,我使用$ getJson。
当我使用$时,我必须将返回的数据引用为[0]。但是当我使用$ getJson时,我不需要获取数组中的第一个元素。从所有呼叫返回的json是相同的。
我一直在尝试阅读文档,说明为什么会如此,但无法找到doco中注明的位置。有人可以向我说明为什么两者之间存在差异以及它在doco中的含义是什么?
感谢
function fetchTranTrends(callback) {
$.getJSON("service/tranAnalysis/tranTrendsPreviousBusinessDate.json?siteId=" + userStore, function(json) {
var data = [];
data.push(json);
callback(data);
});
}
function fetchYearlyComparisonData(callback) {
$.when(fetchThisYearsData(), fetchLastYearsData()).done(function (dataThisYear, dataLastYear) {
var data = [];
data.push(dataThisYear[0]);
data.push(dataLastYear[0]);
callback(data);
});
}
function fetchThisYearsData() {
return $.getJSON("service/tranAnalysis/tranCountsPreviousSevenDays.json?siteId=" + userStore + "&yearOffset=0", function(json) {});
}
function fetchLastYearsData() {
return $.getJSON("service/tranAnalysis/tranCountsPreviousSevenDays.json?siteId=" + userStore + "&yearOffset=1", function(json) {});
}
答案 0 :(得分:1)
请参阅jquery文档中给出的when
示例。
http://api.jquery.com/jquery.when/#example-0
$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
// a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
// Each argument is an array with the following structure: [ data, statusText, jqXHR ]
var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
if ( /Whip It/.test( data ) ) {
alert( "We got what we came for!" );
}
});
每个参数都是a1=[data, statusText, jqXHR]
形式的数组。
因此,您需要执行a1[0]
来获取呼叫返回的数据。
希望有所帮助。
答案 1 :(得分:1)
您正在使用具有多个承诺的$.when()
,在这种情况下,每个承诺可能会使用不同数量的参数来解析,因此在回调方法中,很难知道参数顺序和请求顺序。
所以在$.when()
中发生的事情是将promise的所有参数分组为一个数组,并传递与回调的promise数一样多的数组