REST-APIとかXMLHttpRequest(XHR)とかって環境でデータを受け取りたくて、AjaxでJSONを処理するはずがうまく処理できない、という事態に陥った時のメモ。まずはうまく処理できなかった時のAjax周りの記述。
JSONをうまく処理できなかった時の記述
$(window).load(function() { jQuery.ajax ({ url: myurl, type: "POST", data: {data:"test"}, dataType: "json", contentType: "application/json; charset=utf-8", success: function(){ // 成功時の処理 } }); });
これでsuccessに至らず。コンソールを確認したところ、「Content-Type:”application/json;charset=UTF-8″」でないといけないところが「Content-Type:”text/plain”」と認識されている様子で、JSONとして受け取ってもらえていない事が原因のようでした。そこで下記のように「JSON.stringify()」メソッドを追記してdataの値をJSON文字列に変換する事で、無事に解決しました。
JSONを処理できた記述
$(window).load(function() { jQuery.ajax ({ url: myurl, type: "POST", data: JSON.stringify({data:"test"}), dataType: "json", contentType: "application/json; charset=utf-8", success: function(){ // 成功時の処理 } }); });
通常のAjax処理であればdataにJSONをそのまま書いても動作していたような気がするのでXHRだからなのかは不明ですが、きっと「JSON.stringify()」を基本としておいた方が無難だなという気がしました。引数にreplacer関数も使えるので、必要なデータに絞り込んだりも出来ますね。AjaxでJSONを処理できない時の対処法「JSON.stringify()」でした。