Ваша функция обратного вызова использует target
, который определен вне области, возможно, глобальной. Вы говорите, что делаете этот вызов несколько раз, и что последняя итерация работает каждый раз, поэтому я предполагаю, что target
фактически изменяется каким-то внешним влиянием? В этом случае вполне может оказаться, что значение target
не является тем, что вы думаете, во время выполнения. Вы можете создать новое замыкание, в котором target
не изменится:
$.get('/Home/Module/Submit', { data }, (function(t) {
return function(result) {
$("#" + t).html(result);
}
})(target));
Здесь мы создаем новую анонимную функцию, которая возвращает функцию обратного вызова, которую вы хотите использовать. Вы можете думать об этом как о заводской функции. Эта функция вызывается немедленно, всего за до вызова get
, так как она должна быть оценена, чтобы определить третий параметр для передачи get
. Мы вызываем эту функцию, передавая target
, поэтому значение target
будет значением, которое она имеет к моменту вызова AJAX, а не, как раньше, ко времени ответа AJAX. Для каждой итерации будет создано новое замыкание, где соответствующий параметр t
будет соответствовать значению target
во время его создания.
Вы не хотите придумать что-то, что будет препятствовать выполнению JavaScript до тех пор, пока не будет выполнен какой-то другой фрагмент кода.