javascript - 如何在 JQuery 语句成功时制作简单的延迟

标签 javascript jquery ajax jquery-deferred deferred

我正在尝试设计一种简单的方法来推迟后续的 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/

相关文章:

javascript - 如何使用 jQuery 并行处理动态添加的脚本标签

javascript - Jquery 更改 .text(something) 然后返回

使用 for 循环创建 JavaScript JSON 对象

javascript - 对下划线模板使用多个数据源

javascript - 获取下拉框中所选项目的id属性

html - 在 jquery mobile 中导航时白色闪烁

javascript - JWPlayer 时间搜索区域和重置变量

javascript - 为什么我的 JavaScript 代码会收到 "No ' Access-Control-Allow-Origin' header is present on the requested resource"错误,而 Postman 却没有?

ajax - 如何使用Dajaxice发送文件数据?

php - php for 循环内的 HTML 标签不采用或添加动态 css 和 div 标签