【发布时间】: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"> </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()是同步的。