2010-09-21 5 views
0

J'ai créé un jeu de devinettes en utilisant jQuery et PHP, et bien qu'il fonctionne bien quand un nombre est entré (et gère aussi bien les non-nombres), lorsque 0 est entré, l'appel Ajax échoue. Pour autant que je sache, quand 0 est entré, la variable $guess envoyée au code côté serveur n'est pas correctement définie, mais je ne peux pas savoir pourquoi - des idées?jQuery L'appel .ajax échoue lorsque '0' est entré

entrée Forme:

<form id="guess" action="magicgubbins.php" method="get"> 
    <p><input type="text" id="newguess" name="guess" value="" /> 
    <input type="submit" value="Guess"></p> 
</form> 

jQuery:

<script type="text/javascript"> 
$(function() { 
    var magicno = Math.floor(Math.random()*11); 

    $('#guess').submit(function() { 

     var newguess = $('#newguess').attr('value'); 
     if (!newguess) { 
      newguess = 'nonumber'; 
     } 

     var form = $(this), 
     //formData = form.serialize(), 
     formData = {guess: newguess, magic: magicno}, 
     formUrl = form.attr('action'), 
     formMethod = form.attr('method'), 
     responseMsg = $('#magicbox'); 

     //show waiting message 
     responseMsg.hide() 
      .addClass('response-waiting') 
      .text('Please wait...') 
      .fadeIn(200); 

      $.ajax({ 
       url: formUrl, 
       type: formMethod, 
       data: formData, 
       success: function(data){ 
        // parse returned data 
        var responseData = jQuery.parseJSON(data), 
         klass = ''; 

        switch(responseData.status){ 
         case 'error': 
          klass = 'response-error'; 
         break; 
         case 'success': 
          klass = 'response-success'; 
         break; 
        } 

        // show new response message 

        responseMsg.fadeOut(200,function(){ 
         $(this).removeClass('response-waiting') 
          .addClass(klass) 
          .text(responseData.message) 
          .fadeIn(200,function(){ 
           if (responseMsg.hasClass('response-success')) { 
            $('#description').hide(); 
            $('#magicbox').hide(); 
            $('#status').text('You win!').show(); 
           } 

           // timeout response message 
           setTimeout(function(){ 
            responseMsg.fadeOut(200,function(){ 
             $(this).removeClass(klass); 
            }); 

           },3000); 
          }); 
        }); 

       } 
      }); 



    return false; 
    }); 
}); 

</script> 

Code côté serveur:

<?php 


$magic = htmlentities($_GET['magic']); 
$guess = htmlentities($_GET['guess']); 


if(empty($magic)){ 
    $status = "error"; 
    $message = "No magic number set!"; 
} else if (empty($guess)) { 
    $status = "error"; 
    $message = "Take a guess!"; 
} else { 
    if(is_numeric($guess)) { 
     if($guess == $magic) { 
      $status = "success"; 
      $message = "Correct! " . $magic . " is the magic number."; 
     } else { 
      if ($guess > $magic) { 
       $status = "error"; 
       $message = "Wrong! " . $guess . " is too high."; 
      } else { 
       $status = "error"; 
       $message = "Wrong! " . $guess . " is too low."; 
      } 
     } 
    } else { 
      $status = "error"; 
      $message = "That's not a number!"; 
    } 
    $data = array(
    'status' => $status, 
    'message' => $message 
    ); 
    echo json_encode($data); 

exit; 

} 
?> 

Répondre

1

Avez-vous débogués l'appel à l'aide fenêtre de la console Firebug Net (ou l'équivalent en Google Chrome)?

N'oubliez pas non plus PHP traite numeric 0 la même chose que false et une chaîne vide dans les opérateurs booléens. Appel vide (0); reviendra vrai. Appel vide ("0"); ne le fera pas.

+0

Je n'ai pas débogué dans Firebug - je n'avais pas réalisé qu'il pouvait faire ça! Je pense que vous avez probablement raison sur le 0 étant traité comme booléen, je vais devoir regarder dans cela. Merci! – whostolemyhat

Questions connexes