先日、LaravelでDBから取得したデータをクライアント側にjsonで返す機能を作っていました。
その際、対象のテーブルによってはレスポンスヘッダーのContent-Typeがapplication/jsonにならず、text/htmlになるパターンがいくつか発生しました。
その時の原因と解決方法をメモがてら記事にします。
目次
原因
データを返した後にLaravel側で何かしらの処理がされていることが原因だったようです。
対策
対策としては、jsonデータを返した後に「exit;」するだけ。
結果、どのパターンでもContent-Typeがapplication/jsonになるようになりました。
参考(ソースコード)
NGパターン
$res = json_encode($data, JSON_UNESCAPED_UNICODE);
header("Content-Type: application/json; charset=UTF-8");
echo $res;
return;
OKパターン
$res = json_encode($data, JSON_UNESCAPED_UNICODE);
header("Content-Type: application/json; charset=UTF-8");
echo $res;
exit;
ちなみに上記では出力を「echo」で行ってますが、「return response()->json($res);」で置き換えることも可能です。
※今回の開発では日本語がASCII表示になるので利用しませんでした
コメント