为什么我的活动第一次没有开火?

时间:2010-10-13 21:21:44

标签: javascript jquery

$(document).ready(function () {
    $('.raj').click(function () {
        if (!$(this).hasClass('already')) {

            $('.infos').html('');

            $('.infos').hide("fast");

            $.ajax({
                type: "POST",
                dataType: "json",
                url: "ggg/hhh/rrr.php",
                success: function (msg) {
                    $('.infos').html(msg['ats']);
                    arr = msg['valid'];
                }
            });

            $('.infos').show("slow");

            if (arr == 1) {
                $(this).css("cursor", "default");
                $(this).addClass('already');
                $(this).animate({
                    opacity: 0.1
                }, 1000);
            }
        }
    })
})

当我点击具有类raj的元素(它是图像)时,没有任何反应。只有在第二次点击它时我的事件似乎才开始。为什么会这样?

修改 这部分内容如下:

if(arr == 1)
{
    $(this).css("cursor", "default");
    $(this).addClass('already');
    $(this).animate({
        opacity: 0.1
    }, 1000);
}

但是msg['valid']实际上总是1,所以我不明白。

6 个答案:

答案 0 :(得分:4)

我想知道它不应该是这样的吗?

$(document).ready(function() { 
    $('.raj').click(function(){
        var thisObj = $(this);
        if(!$(this).hasClass('already'))
        {
            $('.infos').html('');
            $('.infos').hide("fast");
            $.ajax({
                type: "POST",
                dataType: "json",
                url: "ggg/hhh/rrr.php",
                success: function(msg) {
                    $('.infos').html(msg['ats']);
                    arr = msg['valid'];
                    $('.infos').show("slow");

                    if(arr == 1) {
                        thisObj.css("cursor", "default");
                        thisObj.addClass('already');
                        thisObj.animate({
                            opacity: 0.1
                        }, 1000);
                    }
                }
            });         

        }
    })            
})

看起来好像因为某种程度上很难读取它而导致错位。

编辑:

附加信息:ajax调用是异步的。这意味着,arr第一次没有设置为1,但是第二次是因为回调已经被触发了(我对此的唯一解释)

答案 1 :(得分:1)

尝试在ajax回调中运行if(arr == 1)语句(成功函数)

答案 2 :(得分:1)

你知道你的“arr”是在post函数中设置的,并且在你测试后执行....

您的ajax请求不是同步的,您只需配置要执行ajax请求的浏览器,但您永远不知道它何时会被执行。

这就是为什么它第二次工作,从那时起ajax-request已被执行。

答案 3 :(得分:0)

$('.infos').show("slow");之后的所有内容都会在发送Ajax请求后运行,但之前已收到响应,因此之前运行成功函数。

这意味着arr未在第一次设置,并且仅在第二次设置,因为您已将其设置为全局。

为响应从服务器返回的数据而发生的所有事情都发生在内部成功函数中,并且不要忘记使用var关键字来保留变量本地

答案 4 :(得分:0)

您应该在AJAX请求的'success'属性中添加您的f-cked部分。另一方面,arr等于0第一次。

        var that = $(this);

        $.ajax({
            type: "POST",
            dataType: "json",
            url: "ggg/hhh/rrr.php",
            success: function (msg) {
                $('.infos').html(msg['ats']);
                arr = msg['valid'];

                $('.infos').show("slow");

               if (arr == 1) {
                   that.css("cursor", "default");
                   that.addClass('already');
                   that.animate({
                     opacity: 0.1
                   }, 1000);
               }

            }
        });

答案 5 :(得分:-1)

最好的方法是拥有萤火虫并有断点并检查流量。 你可以用这种方法轻松解决。

如果不起作用,请尝试使用实时点击操作,这样就不会遇到任何绑定问题。