2015-09-11 68 views
1

所以我工作的一个游戏,用动态JS/PHP负载。我唯一的问题是我不能让我的JS图形验证码抢所选文本区域(cAnswer)的送价值从botcheck.php到do.php检查验证码输入正确。值()和焦点()不工作

.focus()不集中在上cAnswer文本输入任一。

这里是我的代码...

TieSCRIPT.JS

Tie = function() { }; 

Tie.id = function (what) { // Shortens the document.getElementById() function 
    return document.getElementById(what); 
} 

Tie.enc = function (what) { // Encoding URL stuff 
    return encodeURIComponent(what); 
} 

Tie.deco = function (what) { // Then Decoding the reply 
    return decodeURIComponent(what); 
} 

Tie.loadDiv = function(where,url,data) { 
    //clearTimeout(timer); 
    var xmlhttp; 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } else { // Crap IE 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       Tie.id(where).innerHTML = xmlhttp.responseText; 
      } else { 
       return false; 
      } 
     } 
     if (!data) { 
      data = ""; 
     } 
     data = data.replace(/: /gi, "="); 
     data = data.replace(/:/gi, "="); 
     data = data.replace(/, /gi, "&"); 
     data = data.replace(/,/gi, "&");  
    xmlhttp.open("POST",url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 

Tie.request = function (url, data) { // Ajax request 
    var xmlhttp; 
     if (window.XMLHttpRequest) { 
      xmlhttp = new XMLHttpRequest(); 
     } else { // Crap IE 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
     } 
     xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       data = xmlhttp.responseText.split("|");     
        for (i = 0; i < data.length; i++){ 
         var one = Tie.deco(data[parseInt(i)]); 
         var two = Tie.deco(data[parseInt(i) + 1]); 
         var three = Tie.deco(data[parseInt(i) + 2]); 
         var four = Tie.deco(data[parseInt(i) + 3]); 
         var five = Tie.deco(data[parseInt(i) + 4]); 

          if (window.Tie[one]) { // echo out a Tie.* command from php file. 
           window.Tie[one](two,three,four,five); 
          } 
        }  
      } else { 
       return false; 
      } 
     } 
     if (!data) { 
      data = ""; 
     } 
     data = data.replace(/: /gi, "="); 
     data = data.replace(/:/gi, "="); 
     data = data.replace(/, /gi, "&"); 
     data = data.replace(/,/gi, "&"); 


    xmlhttp.open("POST",url,true); 
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    xmlhttp.send(data); 
} 

Tie.alterDiv = function(where,what) { // Shortening again. 
    if (Tie.id(where)) { 
     Tie.id(where).innerHTML = what; 
    } 
} 


Tie.getCaptcha = function() { 
    Tie.loadDiv("popUp","botcheck.php"); 
    Tie.id("cAnswer").focus(); 
} 

Tie.submitCaptcha = function() { 
    var answer = Tie.enc(Tie.id("cAnswer").value); 
    Tie.request("do.php", "p: submitCaptcha, a: " + answer); 
    Tie.enc(Tie.id("cAnswer").value = ""); 
} 

BOTCHECK.PHP

<?php 
    include('connect.php'); 
?> 
<div id="popUpBotContent"> 
    <center> 
     <p>Please enter the WHITE numbers only...</p><br /> 
     <div id="captchaPicture"><img src="validate.php" width="120" height="60" id="captcha"></div><br /> 
     <input type="text" id="cAnswer" size="5" maxlength="3" onkeydown="if (event.keyCode == 13) { Tie.submitCaptcha(); fade('popUpBotContent'); return false; }" /> 
     <input type="submit" onClick="Tie.submitCaptcha();slide('popUpBotContent');" value="Submit" /> 
     <br /><br /> 
    </center> 
</div> 

DO.PHP

<?php 
    include('connect.php'); 

    $a = $_POST['cAnswer']; 
    $lastAction = $info['last_action']; 
    $lastActionTime = $info['user_timer_end']; 
    $now = time() - 180; 

    IF (isset($_POST['cAnswer'])) { $p = "submitCaptcha"; } else { $p = "none"; } 

     IF ($p == "submitCaptcha" && $a == $info['bot_num']) { // captcha 
       $botTime = time() + 900 + rand(60,300); 
       mysql_query("UPDATE `user_info` SET `next_botcheck` = '$botTime' WHERE `user_id` = '$info[user_id]'"); 
       mysql_query("UPDATE `user_info` SET `botcheck` = '0' WHERE `user_id` = '$info[user_id]'"); 
       $newTime = date("H:i", $botTime); 
       echo "alterDiv|botTime|$newTime|"; 
     } else IF ($p == "submitCaptcha" && $a != $info['bot_num']) { // captcha 
      echo "getCaptcha|"; 
     } 
?> 

我知道这是一个相当位可以通过,但任何输入将不胜感激。希望我没有留下任何东西。

让我知道是否需要更多信息。

谢谢!

+1

凡与cAnswer ID输入?该死的,我真的看不到它....你只是有''没有标识 – Cosmin

+0

糟糕。当我将代码添加到问题中时,我清理了一下,忘了将其添加回去。现在修复。尽管如此,仍然没有解决我的问题。 – Segarac

回答

0

好的,所以焦点不起作用,因为当你调用它时,元素不存在。您生成使用Ajax元素,女巫是异步的。当你关注它时,它还没有生成。

我建议你在loadDiv中添加一个带有函数名称的新输入,它将作为回调函数,并且可以在内容添加到页面后调用它。

我认为你有值相同的流量问题。

只是为了测试,如果这真的是问题:为xmlhttp请求添加异步选项为false。