2017-04-25 8 views
1

これは、AjaxCallFourが実行された後でAjaxCallFiveが実行されるときに起こります。私は同時に呼ばれる2つの機能を以下のようにA2変数の行を変更した場合誰かがその2つの呼び出しがどのように異なっているかを深く説明することができます

var ajaxOptionsFour = { 
    type: "GET", 
    url: '/Home/AjaxCallFour', 
    data: { value: '10' }, 
    success: updatePage, 
    error: printError 
}; 

var ajaxFive = function() { 
    return { 
     type: "GET", 
     url: '/Home/AjaxCallFive', 
     data: { value: '10', dumyContent:"" }, 
     success: updatePage, 
     error: printError 
    } 
} 

var a1 = $.ajax(ajaxOptionsFour); 
    var a2 = a1.then(
     function (data) { 
      // .then() returns a new promise 
      return $.ajax({ 
       type: "GET", 
       url: '/Home/AjaxCallFive', 
       data: { value: '10', dumyContent: data.data }, 
       success: function (response) { console.log(response.dumyContent) }, 
       error: function (response) { console.log() } 
      }); 
     }); 

a2.done(function (data) { 
    console.log(data.data + data.waitValue); 
}); 

しかし、AjaxCallFiveはAjaxCallFourが最初に実行されますするのを待たずに実行されます。

var a2 = a1.then($.ajax(ajaxFive())); 
+0

を使用すると、Ajax呼び出しとそれを呼び出しているので、前のステップから返されたデータを渡すことができるように

また、あなたはajaxFive()を高めることができます戻り値が格納されます。この場合、それは返される約束です。 – epascarello

答えて

2

さらに、ハンドラ関数を.then()に渡す必要があります。あなたは約束がその$.ajax()呼び出しからの戻り値は.then()が期待するものではありませんコードで$.ajax()から

var a2 = a1.then($.ajax(ajaxFive())); 

を返さ渡しています。

それは.then()に機能して渡すこと

var a2 = a1.then(function(data) { 
    return $.ajax(ajaxFive()); 
}); 

する必要があり、2番目のAJAX呼び出しは、実際に約束メカニズムまで呼び出しその機能を開始しません。その後、

var ajaxFive = function (content) { 
    return { 
     type: "GET", 
     url: '/Home/AjaxCallFive', 
     data: { value: '10', dumyContent: content }, 
     success: updatePage, 
     error: printError 
    }; 
}; 

と::

var a2 = a1.then(function(data) { 
    return $.ajax(ajaxFive(data.data)); 
}); 
関連する問題