【问题标题】:Show animation while waiting for external ajax request在等待外部 ajax 请求时显示动画
【发布时间】:2016-05-23 21:42:40
【问题描述】:

用于 GUI 操作的 JavaScript 调用用于数据处理的 JavaScript。我想在等待外部 ajax 请求时显示动画。 例如:gui.js 具有方法 showData(id)data.js 具有函数 getData(id)。在showData(id) 里面我打电话给getData(id)。在getData 内部是一个$ajax,用于从数据库中获取数据。我想在showData(i) 等待getData() 时显示动画。

在另一个 ajax-request 成功后,我发现了很多用于发出 ajax-request 的方法,但我的问题没有解决方案。

更新: 立即获取详细信息。也许我可以返回 $.ajax 并使其异步。

function getData(id) {
var ajaxResult = $.ajax({
    type : 'POST',
    url : '/ajax/getData.php',
    data : {'id' : id},
    dataType : 'json',
    async: false,
    error : function() {
        console.log("FAILURE on getting" + id);
    }
});
return ajaxResult.responseText;}

showData 应该调用 getData()。

function showDetails(id) {
$('#ElementInfo').html("");
var jsonData = getData(); //while that show load
//hide load animation
$('#ElementInfo').html(makeHtml(data));}

【问题讨论】:

  • 您确定没有在互联网上找到与您的问题相关的任何内容吗?
  • 假设有一个 ID 为 someId 的元素,您希望在其中显示从 ajax 响应返回的内容。将动画添加到 ID 为 someId 的那个元素,并在返回数据时使 someId 的长度为零(动画将被隐藏),并将响应附加到 ID 为 someId 的那个元素。它应该工作

标签: javascript jquery ajax


【解决方案1】:

在 html 元素中添加动画。

在 ajax 请求之前“显示”元素。在 ajax 请求“成功”时,再次“隐藏”它。

即。

html

<div class="animation">animation here</div>

js

$("#animation").show()
$.ajax({
    type:"GET",
    url:"/whatever/url"
    dataType:"json",
    success:function(response){
        $("#animation").hide();
        //then do what you need to do with your response
    }
});

}

【讨论】:

  • 为什么是visibility:hidden?为什么不display:none
  • 对不起,我的问题是,我不允许从 getDetails 中的 ajax-Request 更改 GUI。为了更好地解释它:我想在 showData(id) 中创建一个 AjaxReqest,等待从 getData(id) 完成 ajax-Request。
【解决方案2】:

创建 2 个类 一个是隐藏 div。

.hidden{
display:none;
}

第二个显示图像。

.show_image{
position:fixed;top:0;right:0;bottom:0;left:0;
background: rgba(0,0,0,0.5) url(/img/spinner.gif) no-repeat 50% 50%;
z-index:100;
background-size: 5ex;
}

您的 HTML 代码将是

<div class="show_image hidden"></div>
<div class="box"> Your  content </div>

初始加载图像处于隐藏模式。现在在发送您的 Ajax 请求之前,只需取消隐藏加载图像,并在获得服务器响应后将其隐藏。

$.ajax({
            url: "http://wwww.example.com",
            type: 'POST',
            data: yout_data,
            dataType: 'json',
            //async: true,
            //cache:true,
            success: function(data) {
                result = data;
            $('.show_image').addClass("hidden");
            },
            error: function() {
                console.log("error: load handler failed: " + url);
                result = "null";
            }
        });

加载中的图片会出现在页面中间,背景会变透明。如果您发现任何困难,请告诉我。

根据您的代码:

function showDetails(id) {
$('#ElementInfo').html("");
 $('.show_image').removeClass("hidden"); // Now the image will be displayed 
var jsonData = getData(); // it will request the data to be return
// in the ajax request i have stopped animation "in success" 
$('#ElementInfo').html(makeHtml(data));}

【讨论】:

  • 我知道执行此操作的正常方法,但我想等待另一个 ajax 请求。也许我应该使用 when()。在 when() 之前我显示等待,之后我隐藏它。但我需要 getData()-Request 中的数据在 showData() 中显示。
  • 当您调用 Ajax POST/GET 请求时,首先我们将显示图像(使用 beforeSend),然后在从服务器获得响应后,我们将隐藏该图像(使用成功)。这就是我们所说的等待时间。不是吗?
  • 是的,没错。但是在 getData() 的 $ajax 中,我不想操纵网页。在 showData 我想从 getData 中获取数据显示它,然后隐藏动画。
  • 能否请您发布您编写的代码 $ajax、getData 等函数,以便我可以可视化您的问题
  • 感谢您的代码。没有太大区别,您是在要求我在获取数据动画后调用“getData()”之前开始动画应该停止。 Ajax 本身会做所有这些事情。但无论如何我已经编辑了上面的答案看看。
猜你喜欢
  • 2017-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 2017-06-09
  • 1970-01-01
相关资源
最近更新 更多