【问题标题】:jQuery promise().done() is not workingjQuery promise().done() 不起作用
【发布时间】:2014-06-10 14:32:54
【问题描述】:

jQuery promise().done() 不工作。以下是我的代码:

<div id="testtesttest">gggggg</div>
<script type="text/javascript">
    Event.observe(window, 'load', function() {
        new Ajax.Request('testurl', {
            method: 'get',
            parameters: {
                id: param
            },
            onSuccess: function() {
                alert('success');
                jQuery('div#testtesttest').html('teststring').promise().done(function() {
                    alert('afterpromise');
                });
            }
        });
    });
</script>

它正在提醒 "success",将 "teststring" 替换为 "gggggg" 但不提醒 "afterpromise" >

我正在使用 jquery-1.10.2。

编辑: 原代码

<?php if (!$this->getAttributeCode() || $this->getProduct()->getData($this->getAttributeCode())): ?>
    <div id="<?php echo $this->getBlockId() ?>" class="lazyblocks-loader">&nbsp;</div>
    <script type="text/javascript">
        Event.observe(window, 'load', function(){
            new Ajax.Request('<?php echo $this->getUrl('lazyblocks/product/' . $this->getLazyAction()) ?>', {
                method: 'get',
                parameters: {
                    id: <?php echo $this->getProductId(); ?>
                },
                onSuccess: function(transport){
                    var data  = transport.responseText;
                    var block = jQuery('#<?php echo $this->getBlockId() ?>')
                    block.removeClass('lazyblocks-loader');
                    if (data.isJSON()) {
                        var jsonData = data.evalJSON();
                        if (jsonData.html) {
                            block.html(jsonData.html).promise().done(function(){
                                block.find('img.lazy').jail({
                                    id              : 'page',
                                    event           : 'load+scroll',
                                    loadHiddenImages: true,
                                    offset          : 10000
                                });
                                <?php echo $this->getChildHtml('lazyblocks.loader.oncomplete'); ?>
                            });
                        }
                    }
                }
            });
        });
    </script>
<?php endif; ?>

可能是什么问题?

【问题讨论】:

  • 这个承诺应该做什么?里面没有异步调用
  • html() 是同步的,它不需要回调、承诺或类似的东西。
  • 为什么不把所有的 onSuccess 代码放在 .done 中?
  • 当然它不起作用,没有什么可以附加承诺的,html() 不会返回延迟。
  • 你不需要承诺。 .html() 是同步的。

标签: jquery promise


【解决方案1】:

问题在于您的 jQuery 版本。如果您使用更高版本(2.1 和更高版本),它将起作用。在最新版本中,如果没有异步工作挂起,jQuery 元素会创建一个已解决的承诺。见

一些假代码,以便我可以链接到 jsfiddle

// Fake code so I can link to jsfiddle

【讨论】:

  • 我相信@FrédéricHamidi 是正确的,我的代码应该可以工作但它不能工作:(
  • promise 的目的是,我需要运行仅适用于 DOM 元素的延迟加载,我的 ajax 请求返回产品数据,并且它们的图像必须使用 jail lib 加载,但 promose 没有通过跨度>
  • @murtzagondal 您的评论很难解读。如果您有更多信息,请将其发布在您的问题中。发布您正在使用的代码。我已经告诉你你的代码有什么问题了。
  • 是的,我刚刚读到你更新的答案,谢谢,让我更新 jquery,如果它有效,我会发布
猜你喜欢
  • 2017-06-08
  • 1970-01-01
  • 2016-09-25
  • 2016-04-20
  • 1970-01-01
  • 2015-09-21
  • 2015-06-30
  • 1970-01-01
  • 2012-11-05
相关资源
最近更新 更多