0

我正在努力弄清楚如何让 JS 警报仅在前一个脚本(词汇表单词替换脚本)完成后才出现。让这个 javascript/jquery 按顺序运行让我很头疼,因为它要么乱序运行,要么第二部分根本不运行。

这是目前在没有警报的情况下工作的代码:

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="jquery.zglossary.min.js" type="text/javascript"></script>

<script>
$(document).ready(function () {
    $('body').glossary('listofwords.json');
    //want alert('finished') to happen after glossary word replacement is finished replacing words here
});
</script>

</head>

我尝试了很多不同的方法来尝试在该评论所在的位置发出警报,并且警报会在任何单词被 zglossary 脚本替换之前立即发生,例如:

<script>
$(document).ready(function () {
    $('body').glossary('listofwords.json');
    alert('finished');
});
</script>

或者脚本将替换所有单词并且根本不会发生警报。一个例子是:

<script>
$(document).ready(function () {
    $('body').glossary('listofwords.json');
}, function() {
    alert('finished');
});
</script>

我尝试过的另一个例子(单词被替换,但没有警报发生)是:

<script>
$(document).ready(function () {
    $('body').glossary('listofwords.json', function() {alert('finished');} );
});
</script>

我真的无法弄清楚这一点。我会很感激任何帮助

4

2 回答 2

1

我以前从未使用过这个词汇表插件 - 但我下载了源代码,我发现问题很明显,因为在异步下载 JSON 数据后词汇表插件不提供任何回调。任何不是 hacky 的解决方案都需要对库本身进行轻微修改。

这是您可以做到的快速方法

通过添加这一行

typeof options.callback == 'function' && options.callback();

在结束时success: function(data) {

那么你的代码就是这样的:

<script>
$(document).ready(function () {
    $('body').glossary('listofwords.json', {callback:function() {alert('finished');}} );
});
</script>

这与您的上一个示例类似,只是它将回调放入插件所期望的选项 JSON 中。

于 2013-11-10T20:02:38.387 回答
0

我不知道什么是“词汇表”,但您可能会找到由 jQuery api提供的 Deferred 对象的解决方案。Deferred 有助于处理 json 调用,尤其是.done()方法用于在调用完成时设置回调。

于 2013-11-10T19:11:48.627 回答