我正在尝试一种简单的方法来推迟后续的JQuery / JavaScript代码执行,直到执行此语句并且变量cache[url]
将.load()
运算符返回给它的对象:< / p>
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()...]
}
...但这并不总是有效,因为在某些情况下,加载比评估花费的时间更长。
实现这一目标的最佳策略是什么?
答案 0 :(得分:2)
根据此处的文档(http://api.jquery.com/load/),您可以将回调函数.load( url [, data ] [, complete ] )
传递给加载,然后调用它,这样就可以了:
$('<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 if(cache [url] = $ .load())将始终评估