admin管理员组文章数量:1414605
So I need two ajax calls to get all the data. I am using jQuery
's ajax call to achieve that. But then I am a bit confused at the execution order. Here is my problematic code:
$.ajax({
type: "GET",
url: "/api/data",
dataType: "json"
}).then(function (data) {
console.log("I am the first")//correct
}).then(function () {
//second ajax
$.ajax({
type: "GET",
url: "/api/lifecyclephase",
dataType: "json"
}).then(function (data) {
console.log("I am the second")//third
})
}).then(function () {
console.log("I am the third")//second
})
The output is
I am the first
I am the third
I am the second
Should not the then
wait for the second ajax
to finish its job before proceeding?
The correct one:
$.ajax({
type: "GET",
url: "/api/data",
dataType: "json"
}).then(function (data) {
console.log("I am the first")
}).then(function () {
$.ajax({
type: "GET",
url: "/api/lifecyclephase",
dataType: "json"
}).then(function () {
console.log("I am the second")
}).then(function(){
console.log("I am the third")
})
})
So I need two ajax calls to get all the data. I am using jQuery
's ajax call to achieve that. But then I am a bit confused at the execution order. Here is my problematic code:
$.ajax({
type: "GET",
url: "/api/data",
dataType: "json"
}).then(function (data) {
console.log("I am the first")//correct
}).then(function () {
//second ajax
$.ajax({
type: "GET",
url: "/api/lifecyclephase",
dataType: "json"
}).then(function (data) {
console.log("I am the second")//third
})
}).then(function () {
console.log("I am the third")//second
})
The output is
I am the first
I am the third
I am the second
Should not the then
wait for the second ajax
to finish its job before proceeding?
The correct one:
$.ajax({
type: "GET",
url: "/api/data",
dataType: "json"
}).then(function (data) {
console.log("I am the first")
}).then(function () {
$.ajax({
type: "GET",
url: "/api/lifecyclephase",
dataType: "json"
}).then(function () {
console.log("I am the second")
}).then(function(){
console.log("I am the third")
})
})
Share
Improve this question
edited Nov 25, 2018 at 1:09
Demi-Gods and Semi-Devils
asked Nov 25, 2018 at 1:03
Demi-Gods and Semi-DevilsDemi-Gods and Semi-Devils
912 silver badges10 bronze badges
2 Answers
Reset to default 4In the problematic code, you are simply missing a return
.
$.ajax({
type: "GET",
url: "/api/data",
dataType: "json"
}).then(function (data) {
console.log("I am the first");
}).then(function () {
return $.ajax({
^^^^^^
type: "GET",
url: "/api/lifecyclephase",
dataType: "json"
}).then(function (data) {
console.log("I am the second");
});
}).then(function () {
console.log("I am the third");
});
Without the return
, there's nothing to inform the outer promise chain of the inner promise's exitence, hence the outer chain does not wait for the inner promise to settle before proceeding to the third stage.
The "second" $.ajax
is initialized within the second .then
, but that $.ajax
isn't chained with anything else - the interpreter initializes the request and that's it, so when the end of the second .then
is reached, the next .then
(the third
) executes immediately.
Try return
ing the second Promise instead - a subsequent .then
will only wait for a Promise
to resolve if that Promise
is returned by the previous .then
:
.then(function (data) {
console.log("I am the first")//correct
})
.then(function () {
//second ajax
return $.ajax({
// ...
本文标签: javascriptJquery ajax call inside a then functionStack Overflow
版权声明:本文标题:javascript - Jquery ajax call inside a then function - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1745163981a2645583.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论