我正在尝试设计一种简单的方法来推迟后续的 JQuery/JavaScript 代码执行,直到执行此语句并且变量 cache[url]
将对象返回给它之后 .load()
运算符:
cache[url] = $('<div class="bbq-item"/>').appendTo('.bbq-content').load(url);
此语句出现在 hashchange 监听器函数的中间:
$(window).on( 'hashchange', function(e) {
etc.
...而且我无法将依赖于 .load()
成功的代码移到它之外。
它不依赖于外部 PHP、JSON 或任何典型的 AJAX“延迟”和“何时”运算符似乎在我在网上找到的示例中蓬勃发展的东西;这是通过 Javascript/JQuery 进行的纯 DOM 查询和操作。
我已经尝试通过将它包装在一个简单的“if”子句中来包装需要遵循它的代码(并且取决于它的成功),如下所示:
if (cache[url] = $('<div class="bbq-item"/>').appendTo('.bbq-content').load(url)) {
[...code that is dependent on success of the .load()...]
}
...但这并不总是有效,因为在某些情况下加载时间似乎比评估时间长。
实现这一目标的最佳策略是什么?
最佳答案
根据位于此处 (http://api.jquery.com/load/) 的文档,您可以将回调函数 .load( url [, data ] [, complete ] )
传递给 load 然后调用它,这样它就会像这样:
$('<div class="bbq-item"/>').appendTo('.bbq-content').load(url, function(responseText, textstatus){
cache[url] = responseText;
if(textStatus === "success" || textStatus === "notmodified"){
[...code that is dependent on success of the .load()...]
}
});
编辑:这是您可以获得的最接近的值,因为加载总是将某些内容返回到缓存 [url] 中...否则您将不知道它是否成功。
请注意:您将始终通过 if 测试,因为设置变量将始终将 truthy 传递给条件,因此 if(cache[url] = $.load()) 将始终评估
关于javascript - 如何在 JQuery 语句成功时制作简单的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32877535/