我知道js异步问题,这就是为什么我提出了以下2个函数,以便将ajax放入可重用函数调用中,以便我可以在站点的其他部分使用它。完成回调后,工作完美无缺。
但我下面的问题是我需要一个来自 getBlocks() ajax调用的变量,需要在第二个ajax调用 getAcct()。我在第一个ajax调用中有一个for循环,它在每次迭代时调用第二个ajax调用来获取帐户的名称。我尝试设置全局变量 qq ,但它始终显示未定义。
如何解决以下问题?
//get nxt blockchain transactions
function getBlocks(acct, ip, pikachu) {
$.ajax({
url: 'http://'+ ip +'/nxt?=%2Fnxt&requestType=getBlockchainTransactions&account=' + acct + '+&withMessage=true',
dataType: 'json',
success: pikachu
}); //get account name
}
//get nxt account info
function getAcct(acct, ip, zelda) {
$.ajax({
url: 'http://'+ ip +'/nxt?=%2Fnxt&requestType=getAccount&account=' + acct + '+&withMessage=true',
dataType: 'json',
success: zelda
}); //get account name
}
getBlocks(nxtacct, nxtip, function(response) {
var xx = [];
xx = response.transactions;
for( i = 0; i < xx.length; i++) {
yy = xx[i].senderRS;
var qq;
getAcct(yy, nxtip, function(response) {
qq = response.name;
});
jQuery(targetb).append("<tr>");
jQuery(targetb).append("<td>" + xx[i].amountNQT +"</td>");
jQuery(targetb).append("<td>" + xx[i].feeNQT + "</td>");
jQuery(targetb).append('<td><a href="https://test.nxtportal.org/accounts/'+ xx[i].sender +'" target="_blank">' + qq + "<em>" + yy + "</em>" + "</a></td>");
jQuery(targetb).append("<td>" + xx[i].recipientRS + "</td>");
jQuery(targetb).append("<td>" + xx[i].message+ "</td>");
jQuery(targetb).append("<td>" + date +"</td>");
jQuery(targetb).append("</tr>");
} //for
});
答案 0 :(得分:1)
您可以使用this
指定和访问自定义AJAX属性。只需在AJAX调用中指定属性,如下所示。
//get nxt account info
function getAcct(acct, ip, myCustomValue, zelda) {
$.ajax({
url: '...',
dataType: 'json',
myCustomProperty: myCustomValue,
success: zelda
}); //get account name
}
然后在zelda
函数中访问您的属性,如下所示。
function zelda(response) {
var valueFromGetAcct = this.myCustomProperty;
// do stuff
}
您可以参考this了解更多信息。