在AJAX请求期间显示/隐藏不起作用

时间:2017-01-13 14:36:20

标签: jquery ajax hide show

我有一个使用ajax请求数据的函数。我想显示一个忙碌的微调器,但隐藏/显示不会改变元素的可见性。

  var map = new ol.Map({
    target: 'map',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM()
      }),
      countries
    ],
    view: view
  });

我知道show / hide语法是正确的,因为它在我将它附加到按钮时起作用。我也尝试过使用:

function RequestDataFromServer(stuff, url) {
    var result;

    $.ajax({
        url: url,
        data: { stuff: Stuff},
        async: false,
        beforeSend: function () {
            $("#divOverlay").show();
            console.log("Starting...");
        },
        complete: function () {
            $("#divOverlay").hide();
            console.log("Complete!");
            result = true;
        },
        success: function (data) {
            AddDataToCache(data);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            result = false;
        }
    });

    return result;
}

没有任何影响(但是,如果我在Chrome中逐步执行此事件,它会显示并隐藏元素)。我也试过在调用RequestDataFromServer函数的函数中显示/隐藏......仍然没有。我没有想法。

3 个答案:

答案 0 :(得分:2)

我对此进行了测试,.hide()<div id="divOverlay" style="display:none;">Something</div> 在我的ajax调用中工作得很好。我猜你有一些导致这种情况的语法错误。让我们做一些家务。

首先,正如其他人所提到的那样,在DOM中可以访问您尝试显示的元素。这是最常见的遗漏IMO。我认为你有一个元素如:

stuff

其次,变量区分大小写。确保变量data: {stuff: stuff}在作为complete传递时为小写。

第三,值得注意的是,在successerror后调用result = true,因此success应该在{{1}中真正定义而不是complete

Ajax Process Flow

function RequestDataFromServer(stuff, url) {
  var result;

  $.ajax({
    url: url,
    data: {stuff: stuff},
    async: false,
    beforeSend: function () {
      $("#divOverlay").show();
      console.log("Starting...");
    },
    complete: function () {
      $("#divOverlay").hide();
      console.log("Complete!");
    },
    success: function (data) {
      AddDataToCache(data);
      result = true;
    },
    error: function () {
      result = false;
    }
  });

  return result;
}

答案 1 :(得分:1)

我有同样的问题,它在async:true时有效。仍然不知道原因,但它有效。

答案 2 :(得分:0)

在你的divOverlay css display中尝试这个用法:none; 这项工作也是如此。

$(document).ajaxStart(function(){
            $("#divOverlay").css("display", "block");
        });

你有ajax

beforeSend: function () {
            $("#divOverlay").show();
            console.log("Starting...");

这意味着“在发送我的ajx之前显示我的div”你写了2次相同的指令。 选择一个并删除另一个。