ajax 経由でデータを取得する js で 2 つの関数を呼び出します。
getNumContentTotal(ctx);
getContentAll(ctx);
getNumContentTotal(ctx) は、getContentAll(ctx) で必要な変数を設定します。
私のvarが設定されるまで2番目の関数を実行しない方法はありますか?
ajax 経由でデータを取得する js で 2 つの関数を呼び出します。
getNumContentTotal(ctx);
getContentAll(ctx);
getNumContentTotal(ctx) は、getContentAll(ctx) で必要な変数を設定します。
私のvarが設定されるまで2番目の関数を実行しない方法はありますか?
getNumContentTotal()
jQuery を使用している場合 (そうであると想定しています)、ajax 呼び出しがメソッドとメソッドで返すオブジェクトを返しますgetContentAll()
。jQuery は promise のようなオブジェクトを返し、シリアル化された方法でコールバックを管理できるようにします。
編集: jQuery の約束に関するより良い記事: Understanding JQuery.Deferred and Promise。
function getNumContentTotal(ctx) {
return $.ajax(...);
}
function getContentAll(ctx) {
return $.ajax(...);
}
var promise = getNumContentTotal(ctx);
promise.pipe(function(data) {
// do something with data
return getContentAll(ctx);
}).done(function(data) {
// do something with data
});
このようなものはどうですか:
function getNumContentTotal(ctx)
{
$.ajax({
url: ajaxUrl,
context: document.body
}).done(function(data) {
getContentAll(data);
});
}
function getContentAll(ctx)
{
//other function
}
したがって、最初の関数がロードされたときにのみ次の関数を呼び出します。このようにして、次の関数に与える変数は常に満たされます。