2016-12-03 5 views
0

私は、再利用可能な関数呼び出しの中にajaxを置くために、以下の2つの関数を思いつきました私はサイトの他の部分でそれを使うことができます。コールバックを使って作業すると完璧に動作します。ネストされたjQuery Ajax - 第1のajaxレスポンスグローバル変数データを第2のajaxに渡して処理します。

しかし、私は以下の持っている問題は、私はgetBlocks(から変数を必要とするということである)第二AJAX呼び出しあるgetacct()にする必要が AJAX呼び出し。最初のajax呼び出しでforループを使用して、各繰り返しで2番目の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

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を参照してください。

+0

私の問題は、ajax呼び出しから** qq **変数を取り除くことです。または、2番目のajaxコールの中にすべての追加情報を入れる必要がありますか? –

+0

あなたは正しくありません。これはその仕方です。そのトリックは、すべてのajax呼び出しを独自の関数呼び出しにすることでした。 –

関連する問題