嵌套的 jQuery Ajax - 将第一个 ajax 响应全局变量数据传递到第二个 ajax 进行处理



我知道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
});

您可以使用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
}

您可以参考此信息以获取更多信息。

最新更新