Ajax调用导致适合隐藏模态

时间:2019-01-18 16:55:23

标签: javascript jquery ajax

编辑:在这里找到了一个绝妙的解决方案:

enter image description here

使用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')代码部分中,没有骰子。

几乎就像我需要一个wait函数,我以为成功是要使用回调函数来解决的,可惜它并没有。

1 个答案:

答案 0 :(得分:0)

您在此处混合同步和异步代码;您不能同步使用if (GetProviderInfo() == true),因为要从该函数返回的内容取决于异步ajax调用。

您当前拥有的return语句将转到它们所包含的success处理程序中;他们将设置getProviderInfo本身的返回值。在成功处理程序运行时,getProviderInfo已经返回。

您可以让该函数返回一个promise(使用return $.ajax({...})),并让调用者异步处理结果-但在这种情况下,仅隐藏/显示模式中的模式可能更简单。 ajax调用的success处理程序。 (看来,当前无法正常工作的唯一原因只是一个错字:当您指$("groupinfo-dialog")

时,有几个地方有$("#groupinfo-dialog")