У меня возникли проблемы с дизайном, связанные с условиями в сочетании с вызовами ajax в javascript с библиотекой jquery. В зависимости от состояния я хочу сделать какой-то ajax-вызов, а затем выполнить процедуру - или я делаю ту же процедуру без вызова ajax.асинхронный код - проблемы с дизайном
Редактировать 1; чтобы быть более конкретным с тем, чего я хочу достичь:
В зависимости от того, существуют ли какие-либо данные объекта, я либо загружаю его из своего локального массива объектов, либо иначе с помощью ajax.
Я пришел с этой структурой:
if(x)
{
$.ajax({
url: "interface.php",
type: "GET",
dataType: "json",
data:{
my_data : testvalue
}
})
.done(function(data){
/* PROCEDURE A */
});
}
else
{
// same procedure
/* PROCEDURE A */
}
мне не нравится, что я должен повторить тот же самый код здесь. Я мог бы, конечно, упаковать процедуру в функцию, но это не изменило бы дизайн.
Я хотел бы иметь структуру, как это:
if(x)
{
$.ajax({
url: "interface.php",
type: "GET",
dataType: "json",
data:{
my_data : testvalue
}
});
}
/* PROCEDURE A*/
так что если x == true
сделать вызов Ajax первым. но всегда выполняйте «ПРОЦЕДУРА А». , но это невозможно, конечно, из-за асинхронности.
что-то еще, что мне пришло в голову, это псевдо-аякс-вызов, но я не знаю, как это получится.
благодарит за любую помощь и предложения!
Почему бы не создать функцию procedureA и вызвать это из обещания ajax и в другом? На самом деле нет способа получить последний пример.Если вы не сделаете это своими собственными обещаниями, но вы по-прежнему увидите ту же структуру, что и с if/else – AtheistP3ace
. «Я мог бы, конечно, упаковать процедуру в функцию». Это, вероятно, более чистое, чем все остальное, придумайте. С дополнительным преимуществом вы можете перенести второй вызов ('else') с помощью [' setTimeout (fn, 0) '] (http://stackoverflow.com/questions/779379/why-is-settimeoutfn-0-sometimes- полезный), так что он всегда называется асинхронно, поэтому вам не придется сложнее диагностировать проблемы позже. –
@ AtheistP3ace, вот что показывает мой первый пример кода. но это то, что мне не нравится дизайн. Как объяснено в моем редактировании - я хочу либо загружать данные из локально хранимого массива (если он существует), либо иным образом с ajax. –