延迟ajax成功不起作用

这是我的ajax

var $this = $(this); $.ajax({ url: "process.php", dataType: 'json' , data :{ method:'POST', id :id , img_val : img_val}, type : 'POST', success: function(output_data){ if (output_data.msg == 'taken'){ ---> $this.val('Saved !').delay(3000).val('Save') ; } } }); 

实际上这个标有--->代码没有用延迟它直接显示Save

如果我删除delay(3000).val('Save')它显示Saved !

我想要的是显示Saved ! 然后等待3秒钟然后显示Save 。 我怎么能实现这个目标? thnaks

$this是按钮。

[更新]使用setTimeout(function(){ /* your code */},3000);

更新 :如果你仍然想使用jquery延迟写这样:

 $('#dd').val('firstVal').delay(2000).queue(function(){$(this).val('SecondVal');}).delay(...; 

DEMO

那是因为’delay()’的默认队列是’fx’,它自动不包含val(),所以你只需要将它添加到它。

 var $this = $(this); $.ajax({ url: "process.php", dataType: 'json', data: { method:'POST', id :id, img_val : img_val }, type: 'POST', success: function(output_data) { if (output_data.msg == 'taken') { $this.val('Saved!'); setTimeout(function() { $this.val('Save'); }, 3000); } } }); 

使用setTimeout( 函数时间是最佳解决方案。
但是如果你想为按钮设置动画,你可以使用jQuery .animate()

 var $this = $(this); $this.val("Saved!").animate( { opacity: 0.99 }, //transition 2000, //duration function() { //animation complete $this.val("Save"); });