在settimeout函数中使用ajax请求json输出
在请求之后我有一个jquery变量
type: 'POST', data: data, cache: false, success: function (data) { var json = jQuery.parseJSON(data);
我试图使用超时在五秒后触发下面的function。
$("#a" + json.id).fadeOut(300);
目前我正在做
setTimeout('$("#a" + json.id).fadeOut(300)', 500);
但它似乎没有用
setTimeout
将函数和数字作为参数,试试这个:
setTimeout(function() { $("#a" + json.id).fadeOut(300); }, 500);
不确定json.id的值是否在调用超时回调时发生变化。
请考虑以下示例:
for (var i=0;i<10;i++){ setTimeout(function(){console.log(i)},500); }
回调函数看到i = 10,因为这是调用函数时i的值。 您可以使用闭包进行预绑定:
var f=function(id){ setTimeout(function(){console.log(id);},500); } for (var i=0;i<10;i++) f(i);
既然您已经了解了封闭和预绑定的工作方式,那么这里是您问题的更强大的解决方案:
var f=function(id){ setTimeout(function(){$('#a'+id).fadeOut(300);},500); } f(json.id);
您的代码不起作用,因为String在全局上下文中被评估。 因此,为了使它工作,您可以使json全局(删除var)。
此外,虽然我不确定您从哪里调用setTimeout
,但假设它在回调内,您可以选择将id作为字符串的一部分:
setTimeout('$("#a'+json.id+'").fadeOut(300)', 500);
但肯定更好的选择是不惜一切代价避免eval和全局变量(结账Eval是邪恶的 , 为什么全局状态是精心解释的恶魔 )并传递一个闭包:
setTimeout(function(){ $("#a" + json.id).fadeOut(300); }, 500);