#javascript #json
#javascript #json
Вопрос:
У меня есть функция JavaScript, которая запускается не по порядку. Он запускает CheckForAddRecordsToAddFromDSS
метод, затем if (check1 || check2)
инструкцию, прежде чем даже запустить CheckForMissingRecordsFromSupp
метод.
Почему это происходит?
$.getJSON("/Home/CheckForMissingRecordsFromSupp", function (data) {
check1 = data;
}).done($.getJSON("/Home/CheckForAddRecordsToAddFromDSS", function (data) {
check2 = data;
}).done(function () {
if (check1 || check2) {
location.reload();
}
})
);
Ответ №1:
Почему это происходит?
.done
ожидает, что будет передана функция. Вы передаете возвращаемое значение $.getJSON
, которое не является функцией.
Рассмотрим следующий пример:
foo(bar())
Даже не зная ничего о foo
or bar
, мы определенно знаем, что это bar
выполняется перед тем, как в foo
передается возвращаемое значение bar
и foo
в, которое передается в,.
Ваш код должен быть:
$.getJSON("/Home/CheckForMissingRecordsFromSupp", function(data) {
check1 = data;
}).done(function() { // <- function
$.getJSON("/Home/CheckForAddRecordsToAddFromDSS", function(data) {
check2 = data;
}).done(function() {
if (check1 || check2) {
location.reload();
}
});
});
Сказав это, поскольку .done
также получает сетевой ответ, вам не нужно передавать обратный вызов $.getJSON
. Вы можете просто написать:
$.getJSON("/Home/CheckForMissingRecordsFromSupp").done(function(check1) {
$.getJSON("/Home/CheckForAddRecordsToAddFromDSS").done(function(check2) {
if (check1 || check2) {
location.reload();
}
});
});