У меня проблема с тем, что мне нужны разные маршруты обратного вызова для одного и того же запроса AJAX, потому что когда-то необходимо использовать ту же функцию (то есть получить информацию о идентификаторе продукта или что-то подобное).Запрос AJAX с раздвоенным обратным вызовом
Что работает, что-то вроде этого:
function1() {
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
route1function();
});
}
function2() {
$.ajax({
url: "test.html", // do the same crap here...
context: document.body
}).done(function() {
route2function();
});
}
function3() {
$.ajax({
url: "test.html", // and here again *yawn*
context: document.body
}).done(function() {
route3function();
});
}
Copy & Paste кодирование является злом, так что моя идея состояла в том, чтобы сделать что-то вроде:
doMyAmazingStuff(iRoute) {
$.ajax({
url: "test.html",
context: document.body
}).done(function() {
switch(iRoute) {
case 1:
route1function(data);
break;
case 2:
route2function(data);
break;
// and so on...
}
});
}
К сожалению, iRoute НЕ будут переданы в .done и не определена. Любые альтернативы, как пережить такие переменные? Копировать/вставить/вставить/вставить ... как в первом примере нет опции (и плохой стиль). Я думаю, что сделать это глобальным охватом (установка переменной тени без объявления ее с помощью var) не является хорошим решением.
«iRoute НЕ будет передан функции .done и не определен»: вы уверены в этом утверждении, потому что я не думаю, что это правильно. Вы проверили это, чтобы убедиться? – Andy
Если я добавлю console.log (iRoute), я получу undefined. – DatLicht
Тогда вы делаете что-то не так, я боюсь. См. Мой ответ ниже. – Andy