Проблема с Json в Jquery - PullRequest
       2

Проблема с Json в Jquery

0 голосов
/ 15 июня 2010

У меня небольшой опрос, но когда я отправляю, он говорит, что сообщение пустое, я не вижу, где моя ошибка.

Если бы вы могли мне помочь, я ценю это.

Спасибо

Моя форма с функцией Jquery и Ajax

<!DOCTYPE HTML>
<hmtl lang="pt-PT">
        <head>
                <title>Formul&aacute;rio</title>
                <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script>
        </head>
<body>
<hr />
        <h3>Formulario</h3>

        <script type="text/javascript" charset="utf-8">
                $(function () {
                        $('#submiter').click( function() {
                                $.ajax({
                                  type: "POST",
                                  url: 'validar.php',
                                  dataType: 'json',
                                  success: function(msg) {
                                        alert('Mensagem '+ msg.mensagem);
                                },
                                error : function () {
                                        alert('Ocorreu um erro');
                                }
                                });

                        });
                });
        </script>

        <form id="formulario" action="" method="post" accept-charset="utf-8">
                <p>Pergunta 1</p>
                <label for="pergunta1">sim</label><input type="radio" id="p1" name="pergunta1" value="1" /><br />
                <label for="pergunta1">n&atilde;o</label><input type="radio" id="p1" name="pergunta1" value="0" />
                <br />

                <p>Pergunta 2</p>
                <label for="pergunta2">sim</label><input type="radio" name="pergunta2" value="0" /><br />
                <label for="pergunta2">n&atilde;o</label><input type="radio" name="pergunta2" value="1" />
                <br />         

                <p>Pergunta 3</p>
                <label for="pergunta3">sim</label><input type="radio" name="pergunta3" value="0" /><br />
                <label for="pergunta3">n&atilde;o</label><input type="radio" name="pergunta3" value="1" />
                <br />         

                <p>Pergunta 4</p>
                <label for="pergunta4">sim</label><input type="radio" name="pergunta4" value="0" /><br />
                <label for="pergunta4">n&atilde;o</label><input type="radio" name="pergunta4" value="1" />
                <br /> 


                <p><input type="submit" id="submiter" value="Continue &rarr;"></p>
        </form>
        </body>
</html>

Мой PHP

<?php
    if($_POST) {
        $pergunta1 = $_POST['pergunta1'];
        $pergunta2 = $_POST['pergunta2'];
        $pergunta3 = $_POST['pergunta3'];
        $pergunta4 = $_POST['pergunta4'];

        $calcular = $pergunta1 + $pergunta2 + $pergunta3 + $pergunta4;

        $var = array ('mensagem' => $calcular);

        echo json_encode($var);
    }
    else {
        $var2 = array('mensagem' => 'sem resultado');
        echo json_encode($var2);
    }
?>

Ответы [ 3 ]

5 голосов
/ 15 июня 2010

Есть две проблемы.На полпути вниз по PHP у вас есть <php, а не <?php.Но на самом деле вы должны использовать json_encode .Просто создайте массив PHP с вашими данными, json_encode, и он сделает все умные вещи JSON для вас.Так будет проще поддерживать.

Еще одна проблема: ключи JSON должны быть строками.

Попробуйте что-то вроде этого:

$result = array();
if ($calcular <= 9) {
    $result['mensagem'] = 1;
}
//... etc.

echo json_encode($result);

Редактировать: Я только что проверил, и у меня работает следующее:

$(document).ready(function () {
    $.ajax({
        type: "POST",
        url: 'validar.php',
        dataType: 'json',
        success: function(msg) {
            alert('Mensagem '+ msg.mensagem);
        },
        error : function () {
            alert('Ocorreu um erro');
        }
    });
});
1 голос
/ 15 июня 2010

Я предполагаю, что это потому, что ваш синтаксис JSON неправильный (посмотрите его и посмотрите, какие цитаты вы пропустили :).Вы можете использовать json_encode в PHP, чтобы уберечь вас от сборки вручную.

Также обратите внимание, что вы должны обслуживать соответствующий тип содержимого из респондента PHP (application/json).Я не знаю, влияет ли это на встроенный разбор jQuery, но он выглядит чище.

0 голосов
/ 15 июня 2010

JSON должен быть в строгом формате, который ваш PHP не предоставляет.Используйте json_encode, чтобы убедиться, что ваш вывод действителен.

Что-то вроде:

<?php
    if(!empty($_POST)) { // ensure _POST exists, and is not empty
        foreach($_POST as $key => $val) {
            // if the string 'pergunta' is contained within that _POST key, add to a total
            if(strpos($key, "pergunta") !== false) { 
                $calcular += $val;
            }
        }

        // return '1' for 9 and under, '2' for 10 or 11, '3' for 12 and over
        $mensagem = ($calcular <= 9) ? 1 : ($calcular > 9 && $calcular <= 11) ? 2 : 3;

        // use json_encode to ensure that what we echo back is valid JSON, eg. {"mensagem":1}
        echo json_encode(array('mensagem' => $mensagem));
    }
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...