Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在ajax加载更多结果时,使用jquery设置/显示div的动画_Ajax_Jquery - Fatal编程技术网

在ajax加载更多结果时,使用jquery设置/显示div的动画

在ajax加载更多结果时,使用jquery设置/显示div的动画,ajax,jquery,Ajax,Jquery,我有一个页面,它循环遍历多个唯一id,并使用ajax将信息加载到与数据库表中的行相对应的div中。因为需要创建相当多的div,并且每个div包含相当多的信息,所以这需要相当长的时间。我想做的是在每个div被附加到dom之后,对其进行动画/显示,从而允许循环在创建更多div时继续附加/显示它们 我的代码如下所示: // loop section unique IDs $.each(uniqueIDs, function(key, uniqueID) { // call AJAX sync

我有一个页面,它循环遍历多个唯一id,并使用ajax将信息加载到与数据库表中的行相对应的div中。因为需要创建相当多的div,并且每个div包含相当多的信息,所以这需要相当长的时间。我想做的是在每个div被附加到dom之后,对其进行动画/显示,从而允许循环在创建更多div时继续附加/显示它们

我的代码如下所示:

// loop section unique IDs
$.each(uniqueIDs, function(key, uniqueID)
{

    // call AJAX synchronously
    // append resulting information to page

    // show newly appended div
    $("#" + uniqueID).slideDown();

});
// loop section unique IDs
var queue = uniqueIDs.splice(0); // copy array
function runQueue()
{
    if(queue.length == 0) return;
    var uniqueID = queue.shift();
    myAjaxLoadFunction(uniqueId, function() {

        // show newly appended div
        $("#" + uniqueID).slideDown();
        runQueue();

    });

});
runQueue();
我遇到的问题是,动画非常不一致。有时,第一个div会设置动画,而所有后续div只会显示而不显示动画。有时,所有div都只是在没有动画的情况下显示。我相信必须有一个更严格的方法来做到这一点

EDIT我一直在同步调用ajax,以保持div的正确顺序(否则div将按照完成的顺序追加到dom中)。我很乐意找到一个使用异步ajax调用的解决方案,该解决方案保留了原始顺序。

为每个异步调用使用一个对象数组,然后将其传递给,只有当所有延迟对象都被解析时,即当所有异步操作完成时,才会触发其回调:

var uniqueIDs = [1, 2, 3, 4];
var $deferreds = [];            

$.each(uniqueIDs, function (i, elem) {
    $deferreds.push(
      $.ajax({
        // options
      }).done(function (data) {
      })
    );
});

$.when.apply($, $deferreds).done(function () {
   console.log(arguments); // arguments will contain the result of each asynchronous call in order
});
因此,您可以使用该回调按顺序设置
div
s的动画


这里有一个

同步运行AJAX往往会对事情产生这种影响,因为浏览器挂起并等待芬兰语请求,同时无法运行动画。你应该这样做:

// loop section unique IDs
$.each(uniqueIDs, function(key, uniqueID)
{

    // call AJAX synchronously
    // append resulting information to page

    // show newly appended div
    $("#" + uniqueID).slideDown();

});
// loop section unique IDs
var queue = uniqueIDs.splice(0); // copy array
function runQueue()
{
    if(queue.length == 0) return;
    var uniqueID = queue.shift();
    myAjaxLoadFunction(uniqueId, function() {

        // show newly appended div
        $("#" + uniqueID).slideDown();
        runQueue();

    });

});
runQueue();

Ofc您可以用jQuery函数调用替换myAjaxLoadFunction,或者您自己的加载函数,它接受回调。

在HTML中使用旋转轮加载图像替换父div怎么样。 比如说:

您可能想在之前确定div的大小和样式,但总的来说,这就是我要说的

<html>
...
<body>
...
<div id="div1"><img src="loading.gif"/></div>
<div id="div1"><img src="loading.gif"/></div>
<div id="div1"><img src="loading.gif"/></div>
...
类似的,其中$(this)是div,结果[index]是您从ajax请求中获得的行。
基本上,.empty()函数保证加载的png将被删除,然后替换为所需的数据


祝您好运。

Ajax是异步的,因此您需要在Ajax函数的回调中执行滑动操作,而且您可能不应该同步使用Ajax。对用户来说,对数据执行大量同步Ajax调用要比异步调用慢得多。您应该异步执行,并将slideDown代码放在ajax调用的成功部分。有没有办法避免这种情况,然后使用回调?您可以保留一个uniqueid及其状态的列表。每次ajax调用结束时,您都会将这个uniqueID的状态设置为complete或诸如此类。然后,您将循环浏览此列表,以确保此唯一ID下的所有内容都已显示,如果未显示,则显示第一个不完整的ID。希望这有意义!如果您有100个UniqueID,这不会因为浏览器的XHR限制而取消前90个请求吗?在您的演示中,对
document.write()
的调用仍然是无序的。即使我以正确的顺序设置
div
s的可见性动画,它们在页面dom中仍然会出现问题。。。还是我遗漏了什么?@user890857:是的,但这些是循环中
$.ajax
的调用。在
.when()
done
回调中,参数将按预期顺序排列,即参数[0]将是数组中第一个唯一ID的结果,等等。@user890857:检查此演示:。这样,您可以使所有请求都异步,并且仍然保证顺序。如果我错了,请纠正我,但是递归运行ajax函数的方法仍然会导致在加载div时创建div,而不是按照数组中的顺序创建div。否,因为此时只加载1(排队),因此它们将按数组的顺序出现。