为ajax调用多次运行setTimeout

时间:2015-09-07 08:59:41

标签: php jquery ajax settimeout

我有一个网页,用户可以发布问题,发布问题,成功回复将文字附加到div“您的问题已发布”。然后div在1秒后消失。

如果用户发布了第二个问题(没有刷新页面),则问题已成功插入数据库,但文本未附加到div。

每次用户发帖时是否需要清除超时?

$(document).ready(function(){
    $('#postquestion').on('submit',function(e) {
        $.ajax({
            url:'/question.php',
            data:$(this).serialize(),
            type:'POST',
            success:function(data){         
                if($.trim(data) == "success") {
                    $('<div align=\"center\" style=\"padding-top:10px\"><p style=\"font-weight:bold;font-size:14px\">Your question has been posted.</p></div>').appendTo('#product_question');
                    setTimeout(function() {
                        $('#product_question').fadeOut('fast');
                    }, 1000);
                }
            },  
            error:function(data){
                $("#error").show().fadeOut(5000);   
            }
        });
        e.preventDefault();
        return false;
    });
});

3 个答案:

答案 0 :(得分:0)

看起来问题是它第二次无法应用,因为您的'#product_question'被隐藏了。或者,当用户发布第二个问题时,您可能会有多个'#product_question'?也许你应该尝试使用类'product_question'而不是id? '.product_question'vs'#product_question'是你的风格。

答案 1 :(得分:0)

看起来你在你要附加消息的div上调用fadeOut,所以当它回来时,div在附加文本时仍然是隐藏的

在fadeOut之后还从dom中删除div将确保dom中一次只有一个div

$('<div id=\"test\" align=\"center\" style=\"padding-top:10px\"><p style=\"font-weight:bold;font-size:14px\">Your question has been posted.</p></div>').appendTo('#product_question');
setTimeout(function() {
    $('#test').fadeOut('fast').remove();
}, 1000);

答案 2 :(得分:0)

Mate,我想你在那里使用的代码太多了。有一个隐藏的div:

<div id="test" class="myclass" align="center" style="padding-top:10px; display:none;"><p style="font-weight:bold;font-size:14px;">Your question has been posted.</p></div>

然后在回拨时显示:

if($.trim(data) == "success") {

$('.myclass').css('display','block');

setTimeout(function() {
   $('.myclass').fadeOut('fast');
}, 1000);

}