jQuery promise().done()不起作用
jQueryjQuery promise().done()不起作用,jquery,promise,Jquery,Promise,jQuerypromise().done()不工作。下面是我的代码: <div id="testtesttest">gggggg</div> <script type="text/javascript"> Event.observe(window, 'load', function() { new Ajax.Request('testurl', { method: 'get', param
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>
gggggg
事件。观察(窗口“加载”,函数(){
新的Ajax.Request('testurl'{
方法:“get”,
参数:{
id:param
},
onSuccess:function(){
警惕(“成功”);
jQuery('div#testtest').html('teststring').promise().done(函数(){
警惕(“事后承诺”);
});
}
});
});
它提醒“成功”,用“gggggg”替换“测试字符串”,但不提醒“后承诺”
我正在使用jquery-1.10.2
编辑:
原始代码
<?php if (!$this->getAttributeCode() || $this->getProduct()->getData($this->getAttributeCode())): ?>
<div id="<?php echo $this->getBlockId() ?>" class="lazyblocks-loader"> </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; ?>
问题在于您的jQuery版本。如果您使用更高版本(2.1及更高版本),它将正常工作。在最新版本中,如果没有异步工作挂起,jQuery元素将创建一个已解析的承诺。看
- (使用最新的jQuery)
- (不工作,带1.10)
一些假代码,这样我就可以链接到JSFIDLE了
// Fake code so I can link to jsfiddle
这个承诺应该做什么?它没有异步调用html()
是同步的,它不需要回调、承诺或类似的东西。为什么不将所有onSuccess代码放在.done中呢?当然它不起作用,没有任何附加承诺,html()不返回延迟的。你不需要承诺.html()
是同步的。我相信@FrédéricHamidi是正确的,我的代码应该可以工作,但它不工作:(这里承诺的目的是,我需要运行lazyloading,它只在DOM元素上工作,我的ajax请求返回产品数据,它们的图像必须使用jail lib加载,但promose无法获得passed@murtzagondal你的评论很难解读。如果你有更多的信息,在你的问题中发布。发布你正在使用的代码。我已经读过了是的,我刚刚读了你更新的答案,谢谢,让我更新jquery,如果它有效,我会发布