2016-04-19 16 views
0

2つのajax呼び出しを行います。もう一つは最初が終了した場合にのみ呼び出されなければなりません。Jqueryは期待どおりに動作しません。

var deferred = $.Deferred(); 

firstAjaxCall(); 

deferred.done(function() { 
    secondAjaxCall(); 
}); 

function firstAjaxCall() { 
    $.ajax({ 
    url: '/SomeUrl', 
    type: 'POST', 
    success: function() { 
     deferred.resolve(); 
    } 
    }); 
} 

function secondAjaxCall() { 
    $.ajax({ 
     url: '/SomeOtherUrl', 
     type: 'Get', 
    }); 
} 

私も(jQuery deferreds)このよう

$.when(firstAjaxCall()).done(function() { 
    secondAjaxCall(); 
}); 

が、運を試してみました。それでも、最初の例では、時々、2番目の呼び出しが最初に呼び出される

、時にはそれが最初の例では、フローは次のようではありません

ん:

firstAjaxCall(); 
secondAjaxCall(); 
deferred.resolve(); 

はなぜ2番目のコールが呼び出されます最初と前にdeferred.resolve()

答えて

2
あなたが実際にその仕事を作るために $.when$.ajaxから繰延返す必要が

function firstAjaxCall() { 
    return $.ajax({ 
     url : '/SomeUrl', 
     type : 'POST' 
    }); 
} 

function secondAjaxCall(data_from_first) { 
    return $.ajax({ 
     url : '/SomeOtherUrl', 
     type : 'Get', 
    }); 
} 

firstAjaxCall().done(secondAjaxCall); 
+0

ここに '$ .when()'の必要はありません。これはちょうど 'firstAjaxCall()。then(secondAjaxCall);' – jfriend00

+0

@ jfriend00 - それは本当です、私はOPがそれを使用していたために追加しました。 – adeneo

0

あなたはこのように最初の1 の成功機能でsecondAjaxCall()を呼び出そうとすることができます

function firstAjaxCall() { 
    return $.ajax({ 
    url: '/SomeUrl', 
    type: 'POST', 
    success: secondAjaxCall() 
    }); 
} 
関連する問題