Javascript 如何从AJAX回调中的setTimeout()内调用存储在一组选项中的函数?
这是我的相关代码:Javascript 如何从AJAX回调中的setTimeout()内调用存储在一组选项中的函数?,javascript,jquery,ajax,Javascript,Jquery,Ajax,这是我的相关代码: success: [ setTimeout(function () { ajax.success }, 250), //... 奇怪的是,我可以在success:[]选项中调用ajax.success,但是当它包装在setTimeout()中时就会停止工作 我认为最有效的方法是在执行此代码之前将ajax.success选项分配给函数,但是我不确定如何执行 非常感谢您
success: [
setTimeout(function () {
ajax.success
}, 250),
//...
奇怪的是,我可以在success:[]
选项中调用ajax.success
,但是当它包装在setTimeout()
中时就会停止工作
我认为最有效的方法是在执行此代码之前将ajax.success
选项分配给函数,但是我不确定如何执行
非常感谢您的帮助,如果这是重复的,我深表歉意。我找不到类似的东西。这就是你的意思吗
function doWork() {
console.log('test');
}
$.ajax({
url: 'xxx',
success: function() {
setTimeout(function() {
doWork();
}, 1000);
}
});
这就是你的意思吗
function doWork() {
console.log('test');
}
$.ajax({
url: 'xxx',
success: function() {
setTimeout(function() {
doWork();
}, 1000);
}
});
success
callback接受处理程序或处理程序列表。但是,调用setTimeout
的结果是与该超时关联的唯一ID。这不是一个函数。因此,您可能想要的是:
success: [
function() {
setTimeout(function () {
doStuff();
}, 250),
},
// ...
]
如果您的函数需要使用一些参数,那么您可以这样包装它:
success: [
function() {
var self = this,
args = arguments;
setTimeout(function () {
doStuff.apply(self, args);
}, 250),
},
// ...
]
请注意,
此
和参数
是关键字。还要注意使用.apply成功
回调接受处理程序或处理程序列表。但是,调用setTimeout
的结果是与该超时关联的唯一ID。这不是一个函数。因此,您可能想要的是:
success: [
function() {
setTimeout(function () {
doStuff();
}, 250),
},
// ...
]
如果您的函数需要使用一些参数,那么您可以这样包装它:
success: [
function() {
var self = this,
args = arguments;
setTimeout(function () {
doStuff.apply(self, args);
}, 250),
},
// ...
]
请注意,此
和参数
是关键字。还要注意.apply
的使用,您能发布整个ajax调用吗<代码>成功:[
看起来无效。ajax.success是一个函数引用,setTimeout返回undefined。因此,在一种情况下,您传递的是函数引用,而在另一种情况下,您传递的是undefined。这就是为什么它以一种方式工作,而不是另一种方式。@bfavaretto来自api:“从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数都将依次调用。”为什么还要将ajax.success
另外包装在匿名function()
中。请尝试setTimeout(ajax.success,250);
。另外,我非常确定成功参数需要使用{}
而不是[]
。引用的ajax
只是传递给我正在构建的插件的一个选项。它不是预定义的,我已经在使用它了。你能发布整个ajax调用吗?成功:[
看起来无效。ajax.success是一个函数引用,setTimeout返回undefined。因此,在一种情况下,您传递的是函数引用,在另一种情况下,您传递的是undefined。这就是为什么它以一种方式工作,而不是另一种方式。@bfavaretto来自api:从jQuery1.5开始,success设置可以接受一系列函数。每个函数都将依次调用。“为什么还要将ajax.success
另外包装在匿名function()
中。请尝试setTimeout(ajax.success,250);
。另外,我非常确定您的success参数需要使用{}
而不是[]
。所引用的ajax
只是传递给我正在构建的插件的一个选项。它不是预定义的,我已经在使用它了。很好,但是你有一个额外的匿名函数。在doWork()中放一个console.log('testing')函数以确保调用它。请尝试将doWork()的定义移动到文档之外的更高级别(全局范围)。ready://请尝试在此处定义它,而不是$(function(){//不要在此处定义它});为了澄清,OP中的代码在插件中。您看到的任何ajax
选项都是从调用我的插件函数的页面传入的。很好,但是您在那里有一个额外的匿名函数。在doWork()函数中放一个console.log('testing'),以确保它甚至被调用。尝试移动doWork()的定义到文档之外的更高级别(全局范围)。ready://请尝试在此处定义它,而不是$(function(){//不要在此处定义它});澄清一下,OP中的代码在插件中。您看到的任何ajax
选项都是从调用我的插件函数的页面传入的。不需要参数。它只是调用页面上脚本中定义的函数。脚本正在传递到我正在构建的插件中。我可以从中调用ajax.success
>成功:[]
无设置超时()
,但它不起作用。@keyCrumbs你有没有尝试过我在更新后发布的代码?也许问题出在函数本身。不需要参数。它只是调用一个在页面脚本中定义的函数。脚本正在传递到我正在构建的插件中。我可以从ajax.success
e> 成功:[]没有设置超时()
,但是有了它,它就不起作用了。@keyCrumbs更新后你有没有尝试过我发布的代码?也许问题出在函数本身。