読者です 読者をやめる 読者になる 読者になる

ITの隊長のブログ

ITの隊長のブログです。いや、まだ隊長と呼べるほどには至っていないけど、日々がんばります。CakePHPとPlayFrameworkを使って仕事しています。最近はAngular2をさわりはじめたお(^ω^ = ^ω^)

【CakePHP】でjQueryの$.getJSONがうまく動作しなくなってワロタ

CakePHP JavaScript jQuery PHP

スポンサードリンク

http://www.flickr.com/photos/19451080@N00/2817382276
photo by Phillie Casablanca


タイトルだけではわからないので、詳細説明。


CakePHPで開発していて、ViewでjQueryを使っています。んで、Ajax使いたくて$.getJSONを使いました。組み込んだ当時は動作していたんだけど、昨日急に動作しなくなった。


長年(jQuery歴3ヵ月^^;)のかんで、jQueryjson系で動作しない場合は、jsonの構文が間違えていてエラーがでるってのがほとんどだと思っていたので、$.getJSONデバッグすることにしました。


あれ? そういえばどうやってデバッグするんだろ?


時間かかったが、できたのでメモ



$.getJSON()をデバッグ

try 〜 catchを使ってみた。


すぐ思いついたのはこの構文。でもダメでした。

try {
	$.getJSON('/url/hogehoge', function(data){

	});
} catch (e) {
	console.log(e);
}


どうしてダメなのかはわかりませんが、まぁなんか見た目から変ですよね。(スコープが違うし)

ぐぐったらあった


うちのネットは遅いので、ネットを使うのが結構ストレス(本末転倒な気がします)。最近すぐググるのはやめて、エラーメッセージを読み解く、またはソースを読むようにしていました。


今回も粘っていたんですが、さすがにイライラしたのでぐぐってみたところ。どうやらハンドリングの手法がありました。


www.koikikukan.com


$.getJSON('/url/hogehoge', function(data){

}).success(function(json) {
    console.log("成功");
})
.error(function(jqXHR, textStatus, errorThrown) {
    console.log("エラー:" + textStatus);
    console.log("テキスト:" + jqXHR.responseText);
})
.complete(function() {
    console.log("完了");
});


ラッキー! さっそく実装して実行。


・・・・・? parse errorであることはわかりましたが、何やらよくわからないメッセージが・・・・?



Notice (´・ω・)?



! おっと。わかっちまったぜ。

CakePHPデバッグが原因だった


そうでした。テストをするためにエラー内容を確認しやすいように、~/cakephp/app/Core.phpデバッグレベルを2にしていたんでした。


デバッグレベルをあげると、NoticeエラーなどがViewに表示されるようになりますので、AjaxでリクエストしたControllerでNoticeエラーが発生していました。本当の原因はここですね。


これを直したらなおりました!

まとめ

  • エラーになるものは消しておきましょう。
  • $.getJSONをデバッグするときは上に上げた方法を使いましょう。


とりあえず治ってよかったです。またひとつ勉強になった。( ´ー`)フゥー...