jQuery延迟对象链接失败
jQuery deferred object chaining failing
为什么这段代码不能工作?
在加载步骤2之前应该等待步骤1加载完成。目前,第2步首先触发。我使用mockjax来模拟Ajax调用。
$.mockjax({
url: "/step1",
responseTime: [3000, 4000],
responseText: {
status: "success",
text: "Loading Step 1"
}
});
$.mockjax({
url: "/step2",
responseTime: [100, 200],
responseText: {
status: "success",
text: "Loading step 2"
}
});
$.getJSON("/step1").then( function(response) {
return $("#message").html( "message: " + response.text );
})
.then(
$.getJSON("/step2", function(response) {
$("#message").html( "message: " + response.text );
})
)
getJSON step2首先触发,因为它具有较短的延迟,并且您可以有效地触发两个$。getJSON的同时
试试这个
$.getJSON("/step1").then( function(response) {
return $("#message").html( "message: " + response.text );
})
.then(
function() { // added this
$.getJSON("/step2", function(response) {
$("#message").html( "message: " + response.text );
})
} // and added this
)
公认的答案不太正确。它并没有真正链接承诺,因为这个:
$("#message").html( "message: " + response.text )
是一个同步函数,不返回promise。因此,返回它返回的值不会创建承诺链。它在这个例子中是有效的,但是当你添加越来越多的承诺时,你会遇到麻烦。
链接承诺的正确方法是返回一个承诺:
someFunction().then(function(){return promise}).then(function(){});
对于你的例子,正确的链接方式是:
$.getJSON("/step1")
.then( function(response) {
$("#message").html( "message: " + response.text );
return $.getJSON("/step2"); // <-------------- return a promise!
})
.then(function(response){
$("#message").html( "message: " + response.text );
})
UPDATE:根据注释,$.when()在这里是不必要的,应该在合并多个promise时使用。
我建议在这里看看使用when - jsFiddle的例子。
$.mockjax({
url: "/step1",
responseTime: [3000, 4000],
responseText: {
status: "success",
text: "Loading Step 1"
}
});
$.mockjax({
url: "/step2",
responseTime: [100, 200],
responseText: {
status: "success",
text: "Loading step 2"
}
});
$.when($.getJSON("/step1"))
.then( function(data, textStatus, jqXHR) {
$("#message").html( "message: " + data.text );
})
.then(
$.getJSON("/step2", function(data, textStatus, jqXHR) {
$("#message").html( "message: " + data.text );
})
)
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 如何使用jQuery自动打开页面上的所有链接
- 动态地改变“”的URL;添加新项目”;链接使用javascript/jquery
- jquery动画可以通过编程链接吗
- 在单击href链接的同时下载文件
- 尽管链接成功并已成功下载,但未找到NPM模块
- 链接CSS、Javascript和HTML进程失败
- 创建具有多个子文件夹链接的Ajax网站失败
- 谷歌翻译导致导航链接失败
- 如果我链接 .sort(),猫鼬查询失败
- ios:如何检测自定义url方案链接是否失败
- PDF的SSRS链接失败
- jQuery延迟对象链接失败
- 有没有办法知道链接/脚本是否仍然挂起或失败
- 有没有办法检查链接、img、脚本是否加载失败?
- 鼠标悬停在链接上后进入失败
- jQuery.getJSON()错误:浏览器链接:调用返回值回调失败:类型错误:无法读取属性'文件'为n
- ROT-13 Internet Explorer中的链接解码失败
- 谷歌地图标记链接失败
- 如果网页 URL 链接失败,则重定向 Javascript URL