javascript - 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;
}
}
});
}
问题是,GetProviderInfo() 中的返回 true 或 false 被忽略,就像 GroupInformationDialog 在 GetProviderInfo 之前一直被评估,所以结果是一个总是弹出的模态对话框。
我什至试图让
$("#groupinfo-dialog").modal('hide');
在if(resp['response']=='NOGROUP')
代码部分,没有骰子。
这几乎就像我需要一个等待函数,我认为成功是一个回调函数会处理它,但可惜它没有。
解决方案
您在这里混合了同步和异步代码;您不能同步使用if (GetProviderInfo() == true)
,因为您希望从该函数返回的内容取决于异步 ajax 调用。
您当前拥有的return
语句将转到success
它们所在的处理程序;他们不会为自己设置返回值getProviderInfo
。到成功处理程序运行时,getProviderInfo
已经返回。
您可以让该函数返回一个承诺(使用return $.ajax({...})
)并让调用者异步处理结果——但在这种情况下,在 ajax 调用的success
处理程序中隐藏/显示模式可能更简单。$("groupinfo-dialog")
(看起来目前不工作的唯一原因只是一个错字:当你的意思是你有几个地方$("#groupinfo-dialog")
推荐阅读
- php - .htaccess 重写漂亮的 URL 而不会影响默认页面
- java - 在非主要活动中运行 DatePickerDialog
- angular - 如何在订阅方法中仅发出最后一个请求
- mongodb-atlas - 如何从 M2 降级到 M0 mongoDB Cluster Tier
- awk - 如何通过 awk 检查 CSV 文件中的连续值?
- javascript - 来自移动设备的Dompdf图片方向不正确(Laravel)
- c# - C#中的类构造函数
- javascript - NodeJS检查对象属性是否不为空
- r - R Markdown 中的列
- python - 如何在 CFFI 制作的 PYPY 中使用 ac 扩展