我有一个小调查,但是当我提交它时说msg为空,我看不出我的错误在哪里。
如果你能帮助我,我可以帮助我。
谢谢
带有Jquery和Ajax函数的表单
<!DOCTYPE HTML>
<hmtl lang="pt-PT">
<head>
<title>Formulá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ã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ã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ã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ão</label><input type="radio" name="pergunta4" value="1" />
<br />
<p><input type="submit" id="submiter" value="Continue →"></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);
}
?>
答案 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));
}
?>