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

How to craft simple defer on success of JQuery statement

本文关键字:语句 成功 JQuery 延迟 简单 何制作      更新时间:2023-09-26

我正在尝试制作一种简单的方法来推迟后续的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"deferred"answers"when"操作符似乎在我在网上找到的例子中茁壮成长;这是通过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测试通过,因为设置一个变量将总是传递真值给条件,所以执行if(cache[url] = $.load())将总是计算