プロが教えるわが家の防犯対策術!

jQueryを利用したAJAX通信で、「●●.js」が不定期エラーになるのですが、エラーの意味も原因も分かりません。
Uncaught TypeError: Cannot read property 'age' of null

■質問1
$.postではエラーを捕捉出来ないと書いてあったので、$.ajaxに書き換えたいのですが、書き方がよく分かりません。どう書き直せば良いでしょうか?

■コード
▼「●●.js」
$.post('test.php',{action: "getmemberdata"},function(data){
 jsondata = $.parseJSON(data);
 if(jsondata == null){
  return true;
 }
 処理
});
 if(Number(jsondata.age)>10){←この箇所で不定期で上記エラーが発生!

▼「test.php」
// Echo Data For Ajax
if($_POST['action']=='getmemberdata'){
 処理
 echo json_encode(データ);


■質問2
AJAX通信の確認をサーバ側で行うことは出来ないのでしょうか?
「test.php」で、echo json_encode(データ);する前に、
 echo データ;
 exit;
としてみたのですが、処理が途中で止まらず、変数の中身を確認することが出来ません。
AJAX通信の確認は、$.ajaxのエラー処理でしか確認することは出来ないのでしょうか?


■質問3
(Number(jsondata.age)>10)がエラーになるので、何とか回避したいのですが、
回避する方法はあるでしょうか?
if(jsondata.age==null){
とか書いてみたのですが、うまくいきませんでした

A 回答 (2件)

>■質問1


http://www.koikikukan.com/archives/2012/10/02-00 …

>■質問2
コールバック関数でデータを受け取れたかどうかの確認は出来ます。

または、サーバーにファイル(ログファイル)として保存しておけば、そのファイルの内容を見る事で確認できます。

>■質問3
jsondataの扱いはtest.phpの受信完了後に処理してますか?
(コールバック関数内に限らず、受信が完了してjsondataに代入できているなら、onclickでもいつでも良いので)


回避するだけなら、

if( jsondata == null ){
if( Number(jsondata.age)>10) {

でいいと思います。
null、undefined、''をNumber()で型変換すると0になりますので、.ageがnullかどうかを判断する必要はないと思います。
(0とnullを区別するのでなければ。)
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

その後、アドバイスを元に、$.ajaxに書き直してみたところ、
エラー捕捉出来ず、そこでようやく、原因が$.ajax以外だということが分かりました。
(最終的にはセッション不具合でした)
色々参考になりましたー

お礼日時:2012/11/26 20:25

Ajax通信が非同期モードで行われていて、$.postの処理が完了しないままif文に突入しているように思います。




$.ajaxはパラメータで通信モードを非同期か同期かを指定できるし、通信成功時や失敗時の処理が切り分けできるのでオススメします。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>$.ajaxはパラメータで通信モードを非同期か同期かを指定できるし、通信成功時や失敗時の処理が切り分けできるのでオススメします
これまであまりエラー処理の重要性を認識していなかったのですが、
今回、原因の切り分けに苦労したこともあり、
エラー処理はやっぱ書くべきだ、
そのためには「$.ajax」を使うべきだ、と思うようになりましたー

お礼日時:2012/11/26 20:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!