JSONP のレスポンスを返す

Symfony の JsonResponse にはデフォルトで CORS 回避などに使われる jsonp にデフォルトで対応してい、Laravel もまたそれに対応している。

書き方

JsonResponsesetCallback を自分で呼び出してやる場合

format: json((array|Object) $data = [], int $status = 200, array $headers = [], int $options = 0)->setCallback(string $callback)

Response::jsonp を使う場合

なお、このメソッドは実質的に上の記法のエイリアスであるので、コールバックが一番前に来るだけである。あとすこしコードが短くなる。

Note

指定する(される)コールバックはJSの予約語と一致していないか、関数・変数名として使用できる名前かがチェックされ、不正な場合は InvalidArgumentException('The callback name is not valid.') が投げられる。

Content-Type ヘッダーは自動的に text/javascript がセットされる。

また、コールバックとして null が渡されると通常のJSONレスポンスとなるため、常に $request->query('callback') のような形でコールバックを渡せるようにしておけばリクエストに応じて JSON / JSONP を自動的に切り替えられるので割りと便利。

setCallback は JsonpResponse が持っているので複数・すべてのJSONを返すエンドポイントで JSONP を利用できるようにする場合はMiddlewareにしてしまうといい。

 

コメントを残す