混合使用同步和异步javascript/jquery,并在最后获得一个成功函数
想知道这个问题的最佳解决方案是什么,这也不是我实际的代码结构或名称,而是说明问题的最简单方法。 我有一个函数,它纯粹用于执行ajax调用并用jquery加载模板混合使用同步和异步javascript/jquery,并在最后获得一个成功函数,javascript,jquery,ajax,Javascript,Jquery,Ajax,想知道这个问题的最佳解决方案是什么,这也不是我实际的代码结构或名称,而是说明问题的最简单方法。 我有一个函数,它纯粹用于执行ajax调用并用jquery加载模板 function load(template) { $('#container').load(template, data, function() { // complete code here }); } 关注$.load()中的第三个参数,即在请求完成时运行的回调函数 现在我在另一个包装器函数中有了
function load(template) {
$('#container').load(template, data, function() {
// complete code here
});
}
关注$.load()中的第三个参数,即在请求完成时运行的回调函数
现在我在另一个包装器函数中有了load()函数:
function processTask(variable) {
load(variable);
}
我的问题是,在ajax加载完成后,我需要一些代码来运行,但是,随着我的应用程序的增长,我的包装函数processTask
可能会调用ajaxload
,也可能不会调用,因此我无法在完整的回调中执行必需的代码
我是将$.load()更改为执行同步还是只是更好地管理代码,以便在调用$.load()时,它会将所需代码放入回调中,如果不是,它会将代码放在需要的地方
我已经读过javascript承诺,我不确定它们在这种情况下是否会有所帮助
编辑
因此,我的processTask
是一个对象方法
function classObj(name, fn) {
this.name = name;
this.processTask = fn;
this.load = function(template) {
$('#container').load(template, data, function() {
// complete code here
});
}
}
在这种情况下,我会这样做:
var task = new classObj('taskName', function() {
this.load('myFile.php');
// Or another function and not load() based on whats needed in the task.
});
基本上,我有一个对象,我可以随意添加自定义方法,并且可以轻松地动态调用它们,直到现在它们始终加载文件。首先,更改
load
函数以从get
(或ajax
)返回xhr:
然后,在代码中,您可以使用当
然后
在加载完成后执行代码(如果适用):
var xhr;
/* ... */
if(something){
xhr = load(template);
}
/* ... */
if(xhr){
$.when(xhr).then(doSomething);
} else {
doSomething();
}
事实上,这可以通过以下事实来简化:当(显然包括未定义)传递给的非延迟对象将立即执行,然后
,并消除if:
$.when(xhr).then(doSomething);
如果未定义xhr
,则将在时立即解析,从而导致然后立即执行。首先,更改加载
函数以从获取(或ajax
)返回xhr:
然后,在代码中,您可以使用当
然后
在加载完成后执行代码(如果适用):
var xhr;
/* ... */
if(something){
xhr = load(template);
}
/* ... */
if(xhr){
$.when(xhr).then(doSomething);
} else {
doSomething();
}
事实上,这可以通过以下事实来简化:当
(显然包括未定义)传递给的非延迟对象将立即执行,然后
,并消除if:
$.when(xhr).then(doSomething);
如果xhr
未定义,则将在时立即解析,导致然后立即执行。“processTask可能调用或可能不调用ajax加载,因此我无法在完整回调中执行必需的代码”可以在“可能调用或可能不调用ajax加载”处包含processTask
的逻辑在问题?中,在上下文中我这样做:
。。。您定义的加载函数不接受任何参数。。。你发布的代码很混乱。this.name
,this.processTask
对问题的意义(如果有的话)是什么?您能否将代码简化为您遇到问题的部分,并至少尝试显示流程逻辑。。。添加“或另一个函数”这样的注释真的无助于为混乱的代码道歉,我的实际代码要复杂得多,并且对象有很多层,因此我无法简单地发布它的示例。“processTask可能调用或可能不调用ajax加载,因此我无法在完整回调中执行必需的代码”可以将processTask
的逻辑包含在问题的“可能调用或可能不调用ajax加载”中,在上下文中我这样做:
。。。您定义的加载函数不接受任何参数。。。你发布的代码很混乱。this.name
,this.processTask
对问题的意义(如果有的话)是什么?您能否将代码简化为您遇到问题的部分,并至少尝试显示流程逻辑。。。添加“或其他函数”这样的注释真的无助于为代码的混乱道歉,我的实际代码要复杂得多,而且对象有很多层,所以我不能简单地发布一个示例。@guest271314这是一个很好的观点load
需要更改为返回xhr的内容,如get
或ajax
。答案更新。@guest271314好的观点load
需要更改为返回xhr的内容,如get
或ajax
。答案已更新。