РЕДАКТИРОВАТЬ: нашел не элегантное решение здесь:
Как закрыть модальное окно после успеха AJAX
с использованием location.reload (), хотя я должен сказать, что мне кажется, что в модальной обработке в jquery есть ошибка. Я не думаю, что мой код ниже был неправильным, но он не работает. (
Когда пользователь нажимает кнопку, он вызывает метод:
onClick(GroupInformationDialog(true)) ... etc
Таким образом, вызывается метод, позволяющий определить, следует ли нам сначала спрятать или открыть модальное сообщение в зависимости от того, что передано, а во-вторых, в зависимости от того, что результат другого метода, выполняющего вызов ajax:
function GroupInformationDialog(open) {
if (open) {
if (GetProviderInfo() == true) {
$("#groupinfo-dialog").modal("show");
} else {
// we got no real data so let's not show the modal at all
$("#groupinfo-dialog").modal("hide");
}
} else {
$("groupinfo-dialog").modal("hide");
}
return false;
}
и вызов ajax:
function GetProviderInfo() {
event.preventDefault();
gid = $('#group_info option:selected').val()
pid = $("#provider_id").val()
$.ajax({
url: '{% url 'ipaswdb: get_group_info_data' %}',
data: "group_id=" + gid + "&prov_id=" + pid,
success: function (resp) {
if (resp['response'] == 'NOGROUP') {
alert("You must first select a group");
$("groupinfo-dialog").modal('hide'); //arg this doesn't work either
return false;
}
else if (resp['response'] == 'OK') {
//fill out form with data.
$("#gi_date_joined_group").val(resp['date_joined_group']);// = resp['credentialing_contact'];
$("#gi_provider_contact").val(resp['provider_contact']);
$("#gi_credentialing_contact").val(resp['credentialing_contact']);
return true;
}
else {
$("#gi_date_joined_group").val('');// = resp['credentialing_contact'];
$("#gi_provider_contact").val('');
$("#gi_credentialing_contact").val('');
return true;
}
}
});
}
Проблема в том, что возвращаемое значение true или false в GetProviderInfo () игнорируется, это похоже на то, что GroupInformationDialog оценивается полностью перед GetProviderInfo, поэтому в результате появляется модальное диалоговое окно, которое всегда всплывает.
Я даже пытался получить
$("#groupinfo-dialog").modal('hide');
в разделе кода if(resp['response']=='NOGROUP')
, без кубиков.
Это почти как если бы мне нужна функция ожидания, я думал, что успех - это функция обратного вызова, которая позаботится об этом, но, увы, это не так.