Javascript $.when().done()不起作用
我在使用jQuery的$.when().done()函数时遇到了一些问题。有人能帮忙吗?当我有ajax调用和非ajax调用方法时,即使我使用$.When().done(),非ajax调用也在调用。请参阅下面的代码片段。方法/函数3之前正在运行Javascript $.when().done()不起作用,javascript,jquery,Javascript,Jquery,我在使用jQuery的$.when().done()函数时遇到了一些问题。有人能帮忙吗?当我有ajax调用和非ajax调用方法时,即使我使用$.When().done(),非ajax调用也在调用。请参阅下面的代码片段。方法/函数3之前正在运行 $(document).ready(function () { Initial(); }); function Initial() { debugger; var emp = { Name: "Ram", Age: 10 };
$(document).ready(function () {
Initial();
});
function Initial() {
debugger;
var emp = { Name: "Ram", Age: 10 };
Main(emp);
}
function Main(em) {
$.when(One(em)).done(Two(em)).done(Three(em.Name));
}
function One(et) {
//some ajax call
console.log("One");
}
function Two(et) {
//some ajax call
console.log("Two");
}
function Three(et) {
console.log(et);//not an ajax call
console.log("Three");
}
编辑:
下面是Vohuman修改后的代码片段,它工作起来很有魅力
$(document).ready(function () {
Initial();
});
function Initial() {
debugger;
var emp = { Name: "Ram", Age: 10 };
Main(emp);
}
function Main(em) {
var def1 = $.Deferred();
var def2 = $.Deferred();
One(em, def1);
Two(em, def2);
$.when(def1, def2).done(function () {
Three(em.Name)
});
}
function One(et, defObj) {
//some ajax call
if (defObj) {
defObj.resolve();
}
console.log("One");
}
function Two(et, defObj) {
//some ajax call
if (defObj) {
defObj.resolve();
}
console.log("Two");
}
function Three(et) {
console.log(et);//not an ajax call
console.log("Three");
}
()
称为调用操作符。它调用一个函数。这意味着您自己正在调用函数,函数的返回值设置为回调,而不是函数本身
$.when(One(em)).done(Two).done(Three);
如果您希望使用参数调用回调,则应使用中间件,即另一个函数
function Main(em) {
$.when(One(em)).done(function() {
Two(em);
}).done(function() {
Three(em.Name);
});
}
还请注意,如果希望发送多个ajax请求并在所有请求完成后执行回调,则可以将多个延迟对象传递给$。当:
$.when(deferredOne, deferredTwo).then(function(resolvedValueOne, resolvedValueTwo) {
});
建议不要对常规函数使用PascalCase名称。按照惯例,在JavaScript中,PascalCase名称用于命名构造函数和类 另一种方法是
$.when(One(em), Two(em)).done(function( a1, a2 ) {
Three(em.Name)
});
但是One and Two方法必须返回promise对象。控制台日志值返回正常,我没有看到错误。如果您从您的角度观察,请粘贴完整的错误消息好吗?@Naga Sai A,我没有收到任何代码错误。。但执行的顺序并不像预期的那样。当一和二被完全执行时,我需要执行函数三。实际上,你应该使用“then”而不是“done”。我得到的输出是一个两个Ram三,我认为这听起来不错。问题出在哪里?@phreakv6,如果您使用函数1和函数2添加一些ajax调用,那么您可以看到不同的输出。上面的代码给出了预期的结果,因为其中三个函数是非ajax的。随着变化,执行顺序是这样的。函数二()函数三()函数一()如何按一()、二()和三()的顺序执行。建议不要对常规函数使用PascalCase名称。按照惯例,在JavaScript中,PascalCase名称用于命名构造函数和类是的,我正在跟踪带有函数名的驼峰案例,为了测试,我使用了这样的名称。。无论如何,谢谢你的建议。@Buddha是的,这应该是订单。done
回调按指定顺序执行。您可能正在寻找答案中的第二个建议片段。如果第二个请求需要来自第一个请求的数据,那么您应该在第一个请求的done
处理程序中发送请求。使用第一个代码片段,我们可以按顺序执行吗?我不是java脚本方面的专家,所以您能提供一些带有第二个代码片段的示例代码吗?目前它有一个订单。我认为jQuery文档会有所帮助。请更新您的问题,并更具体地说明您正在努力实现的目标。