Вызов jQuery .ajax завершается неудачно, когда вводится «0» - PullRequest
0 голосов
/ 21 сентября 2010

Я создал игру «Угадай число», используя jQuery и PHP, и, хотя она отлично работает, когда вводится число (а также хорошо обрабатывает не числа), когда вводится 0, вызов Ajax не выполняется. Насколько я могу судить, при вводе 0 переменная $guess, отправляемая на серверный код, не устанавливается должным образом, но я не могу понять, почему - какие-либо идеи?

Форма ввода:

<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>

Код на стороне сервера:

<?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;

}
?>

1 Ответ

1 голос
/ 21 сентября 2010

Вы отлаживали вызов с помощью окна консоли Firebug Net (или его эквивалента в Google Chrome)?

Также не забывайте, что PHP обрабатывает числовой 0 так же, как false и пустую строку в логических операторах.Вызов пустой (0);вернет истину.Вызов пустой («0»);не будет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...