Jquery中的Json问题

时间:2010-06-15 09:54:13

标签: php jquery ajax json

我有一个小调查,但是当我提交它时说msg为空,我看不出我的错误在哪里。

如果你能帮助我,我可以帮助我。

谢谢

带有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 个答案:

答案 0 :(得分:5)

有两个问题。在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 :(得分:1)

我猜这是因为你的JSON语法不正确(查一下,看看你错过了什么引用:)。您可以在PHP中使用json_encode来避免手动构建它。

另请注意,您应该从PHP响应者(application/json)提供适当的内容类型。我不知道这是否会影响jQuery内置的解析,但感觉更清晰。

答案 2 :(得分:0)

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