如何制作简单的推迟JQuery语句的成功

时间:2015-10-01 00:10:31

标签: javascript jquery ajax jquery-deferred deferred

我正在尝试一种简单的方法来推迟后续的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()...]
}

...但这并不总是有效,因为在某些情况下,加载比评估花费的时间更长。

实现这一目标的最佳策略是什么?

1 个答案:

答案 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())将始终评估