2017年5月1日

AjaxでJSONを処理できない時の対処法「JSON.stringify()」

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()」でした。

,

コメントを残す

メールアドレスが公開されることはありません。