无法在javascript中随机呈现变量

时间:2015-10-14 19:56:28

标签: javascript ajax function

我正在创建一个小小的比赛来赢取奖品。

我有4个奖项,我希望每10天就有一次胜利。

我有两个问题:

  1. 当我点击图片.panneau(试图获胜)时,它总是会附上您未赢的消息

  2. 我不知道如何随机获取表明胜利的变量

  3. 这是我目前的代码:

    $(".panneau").click(function(){
        if($(".panneau.uncover").length == 0){
            $(this).addClass("uncover");
    
            $("#intro").hide();
    
            $.ajax({
                url:'index.php',
                type:'POST',
                success:function(data){
                    var nomDuLot ="";
                    $('#registration input[type=hidden]').remove();
                    $('#registration').append('<input type="hidden" name="myprize" id="myprize" value="'+data.prize+'"/><input type="hidden" value="'+data.id+'" id="id" name="id"/>'+data.nonces);
    
                    if(data.prize=="1"){
                        nomDuLot = "price1";
                    }else if (data.prize=="2"){
                        nomDuLot = "price2";
                    }else if (data.prize=="3"){
                        nomDuLot = "price3";
                    }else if (data.prize=="4"){
                        nomDuLot = "price4";
                    }
    
                    setTimeout(function(){
                        if(data.prize=="1" || data.prize=="2" || data.prize=="3" || data.prize=="4"){
                            if(data.prize=="1"){
                                $(".panneau.uncover").append("<p class='long'>Bravo! Vous avez gagné<br><span class='lot'>"+nomDuLot+"</span></p>");
                            }
    
                            $("#inscription_auto_tirage_au_sort").html("Vous devez vous inscrire pour valider votre gain.<br>En plus, vous participerez automatiquement au tirage au sort pour tenter de gagner 1 set de pneus hiver d’une valeur de 500 €.");
                            $("#etape3 > h2.gagnant").addClass("active");
                        }else{
                            $(".panneau.uncover").append("<p>Vous n'avez<br>&nbsp;pas gagné...</p>");
                            $("#inscription_auto_tirage_au_sort").html("Mais tout n’est pas perdu. Inscrivez-vous pour tenter de gagner blablabla.");
                            $("#etape3 > h2.perdant").addClass("active");
    
                            // je force le gain à 0
                            $("#myprize").val("0");
                        }
    
                        $("#etape2").show();
                    }, 100);
                }
            });
        }
    });
    

1 个答案:

答案 0 :(得分:1)

  1. index.php必须在响应的prize键中返回随机获胜。你总是收到失败的消息,因为没有任何胜利条件得到满足(根据你原来的文字&#34; ajax变量随机[...]我不知道该怎么做&#34;)

    if(data.prize=="1" || data.prize=="2" || data.prize=="3" || data.prize=="4"){
    

    如果来自index.php的回复是其中一个字符串,则仅显示获胜。

  2. 如果您希望每10天才能获胜,则需要在某个地方存储日期。它可以很容易地作为写入磁盘的文本文件或数据库中的一行。但在某个地方,你需要在最后的胜利时存储。然后,每次向index.php发出请求时,请根据当前日期检查该日期。如果差异是10天,则随机产生一个胜利。

    您还可以获得已经赢得奖品的列表,或者只是动态计算可用的奖品(搜索目录/prizes获取文件列表,获奖时删除该文件)。对此没有100%正确或错误的答案,但您可能想要考虑使用数据库来使问题更易于维护和报告(&#34;我想知道哪些奖品还剩下什么?&#34;,例如,可以查询数据库而不是搜索文件。)

    你的&#34;每10天&#34;逻辑可能是这样的:

    if( $today >= $lastWin + '10 days' ){
        $random = mt_rand( 0, 100000000 );
    
        if( $random === 569351 ){
            $prize = getRandomAvailablePrize();
        }
    }
    

    因此,百万次尝试中的一个人(统计上,可能是或多或少)会击中数字&#34; 569351&#34;如果最后一次胜利是10天前或更长时间,将赢得奖品。

  3. 当然,这都是伪代码,所以实际的实现会更深入一些,但这是为了给你一个想法。 不要忘记在POST后返回JSON响应

    { "prize": "[number]" }
    

    其中[number]1234,或者为空而为空。