$.ajaxでparsererrorが発生し、jQuery1.3からアップデート出来ない時の対処方法

jQuery1.3から、今まで様々な機能が追加され、最近のプラグインも最近のjQueryを対象に作られていることが多くなっています。レガシーなシステムにおいて、JSONをエンコードする部分を自力で作っているような場合、アップデート出来ない場合も多いのではないでしょうか?

$.ajaxでparsererrorが発生し、jQuery1.3からアップデート出来ない場合の対処方法を説明します。

JavaScriptで対策する場合

以下のコードをjQueryを読み込んだ後に記述します。

(function() {
	var _ua = (function(){
		return {
			ltIE6:typeof window.addEventListener == "undefined" && typeof document.documentElement.style.maxHeight == "undefined",
			ltIE7:typeof window.addEventListener == "undefined" && typeof document.querySelectorAll == "undefined",
			ltIE8:typeof window.addEventListener == "undefined" && typeof document.getElementsByClassName == "undefined",
			IE:document.uniqueID,
			Firefox:window.sidebar,
			Opera:window.opera,
			Webkit:!document.uniqueID && !window.opera && !window.sidebar && window.localStorage && typeof window.orientation == "undefined",
			Mobile:typeof window.orientation != "undefined"
		}
	})();

	if (!_ua.ltIE7) {
		var orgParseJSON = window.JSON.parse;
		window.JSON.parse = function(data) {
			return eval('(' + data + ')');
		};
	};
})();

jQuery1.4からwindow.JSON.parseを使用し、JSONデータをデコードするように変更されたのですが、それを1.3と同じeval関数で処理することで対策します。IE7以下の場合、window.JSON.parseが元から存在しないので、実行しません。(参考: JSでのUA条件分岐便利スニペット)

ただevalは危険なコードが実行されてしまう可能性はあるので注意してください。

サーバー側のphpで対策する場合

jsonを出力している部分をjson_encode関数で置き換えましょう!これが一番根本的な対策でお勧めです。

文章変更履歴

  • 2012年4月10日 IE6、7でバグがあったため修正

最後に

サーバー側を触る気はなかったのですが、やはり根本的に対策した方が良いと思ったので、全て探して書き換えました。今にまた必要になるかもしれないので備忘録的に記録しておきます。

ページトップ

お勧め商品・サービス

ブックマーク!


コメント投稿

* は必須項目です。入力したメールアドレスは公開されません。

*
*



AccessやExcel、.NETソフトウェア開発、WordPress等を使用したWebのシステム化、PCサポート、コンサルなどを行っています。全国対応可能です。お問い合わせください。
TEL (0776)56-8539