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

时间:2016-12-03 18:34:43

标签: javascript 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
});

1 个答案:

答案 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了解更多信息。