【问题标题】:Recursive jQuery load command递归 jQuery 加载命令
【发布时间】:2011-01-16 11:21:08
【问题描述】:

在之前关于 Recursive jQuery load 命令的帖子中,建议的代码可以工作,但有一些限制。这是已经提出的代码和the link

function loadTree($element) {
  $element.each(function(){
    this.load('url', function(){
      loadTree(this.find('.children'));
    });
  });
}

loadTree($('#content'));

上面代码的问题是,如果加载不成功,递归循环就会终止。在我的情况下,我一个接一个地加载图像,并通过 AJAX 调用从数据库中获取图像 URL。如果由于某种原因图像 URL 不正确,递归将停止,我不希望这件事发生。无论如何都必须加载其余图像,因为如果我有 100 个图像路径,除了第一个之外,所有这些路径都有效,那么所有 100 个都不会显示。

我还有另一个相关的问题。基本上我是通过 ajax 检索 7 个图像 url,然后我在一个字符串中形成 7 个 html 图像标签,然后只用该字符串调用一次加载事件:所有这些都是为了减少浏览器请求的数量。因此,我希望加载所有 7 个图像后触发加载事件回调。但是,当我尝试此操作时,每个图像的加载事件回调都会触发。关于如何在所有项目已加载(无论是否成功加载;尝试加载)时触发回调的任何想法。

谢谢

【问题讨论】:

  • 只是一个想法,但将图像 URL 树从单个调用返回到后端,然后在客户端代码中逐步执行不是更好吗?
  • 我不只是获取 URL,我还获取 URL、宽度和高度、标题等……而让整棵树说 1000 张图像将无法达到目的。

标签: jquery events recursion load


【解决方案1】:

我无法对此进行测试,但它应该能让你走上正确的轨道来解决你的问题。

由于您正在做的事情的复杂性,您应该转向更详细的 $.ajax 函数,因为它每次都提供更多回调函数并测试失败。

   function loadTree(element) {
    var elementsQueried = 0;
    $(element).each(function(index, value){

        $.ajax({
            url: 'url',
            success: function(returnValue){
                $(value).html(returnValue); //if successful ajax assign the returned html to the element
                loadTree($(value).find('.children')); //then continue searching the child tree
            },
            error: function(request,error) {
                $(value).html('File not found'); //else give some useful error message, but dont keep searching child tree

            },
            complete: function(){
                elementsQueried++;
                if (elementsQueried==$(element).length){
                    //callback
                }
            }
        });

    });
   }

就像我说的那样,我无法对其进行测试,因此可能存在一些问题,特别是 elementsQueried var 的范围以及如何通过递归处理。

【讨论】:

  • 感谢您的回答。大约一周后,我使用了您建议的方法,效果很好,但我仍然改变了策略。我开始从 ajax 调用返回一大块图像,并在可滚动的 div 中显示它们。每当用户通过滚动低于显示的最后一个缩略图的中心点时,我都会通过另一个 ajax 调用获得另一个块。这样,我使用浏览器中实现的优化以由浏览器确定的最佳顺序下载缩略图,并且仅在需要时才获取下一组缩略图。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-17
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多