2010-06-15 54 views
0

我有一個小調查,但是當我提交它時說msg爲空,我看不出我的錯誤在哪裏。Jquery中的Json問題

如果你能幫我我apreciate它。

謝謝

我用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); 
    } 
?> 
+0

我不認爲這個問題是在PHP代碼,但是在Jquery的... – Davidslv 2010-06-15 10:21:40

回答

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'); 
     } 
    }); 
}); 
+0

嘿嘿,謝謝您的回答,我重拍的代碼,但Firebug是給出相同的問題: msg爲空 [Break on this error] alert('Mensagem'+ msg.mensagem); – Davidslv 2010-06-15 10:10:15

+0

哦,男人......非常感謝你! – Davidslv 2010-06-15 10:32:37

+0

樂意幫忙:) – Skilldrick 2010-06-15 10:36:58

1

我猜這是因爲你的JSON語法不正確(查找並查看錯過的引號:)。您可以在PHP中使用json_encode以免您手動構建它。

另請注意,您應該從PHP響應者(application/json)提供適當的內容類型。我不知道這是否會影響jQuery的內置解析,但它感覺更乾淨。

+0

謝謝,我會檢查一下......我在Perl中有一個類似的代碼,並沒有任何問題......我真的不知道這裏發生了什麼.. 謝謝 – Davidslv 2010-06-15 10:11:28

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