使用 Laravel 的 JSONP
Posted
技术标签:
【中文标题】使用 Laravel 的 JSONP【英文标题】:JSONP with Laravel 【发布时间】:2012-11-24 16:54:21 【问题描述】:浏览器向 Laravel 发送 JSONP 请求,Laravel 将结果返回给浏览器。在浏览器控制台中,我收到警告:
Resource interpreted as Script but transferred with MIME type text/html:
我认为这是由于 JSONP 响应中的标头不正确造成的?应该如何解决这个警告?
PHP
$callback = Input::get('callback');
$result = DB::table('users')->find(123);
return $callback . '(' . json_encode($result) . ')';
Response::JSON($result)
我相信会返回通常的 JSON 响应,而不是带有回调函数名称的 JSONP 变体。
【问题讨论】:
【参考方案1】:你可以在 Lavavel 4 中做到这一点:(原文:Tu puedes hacer esto en Laravel 4)
Response::json($result)->setCallback(Input::get('callback'));
【讨论】:
【参考方案2】:您可以在 Response::json() 调用中提供标头。
Response::json($result, 200, array('Content-Type' => 'application/javascript'));
JSONP 的正确 MIME 类型是 application/javascript。
【讨论】:
【参考方案3】:对于 Laravel(5.1 及以上)或 Lumen(5.1 及以上):
如果你想创建一个 JSONP 响应,除了 setCallback,你还可以使用 JSON 方法:
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->setCallback($request->input('callback'));
【讨论】:
【参考方案4】:Response::json($result)->setCallback(Input::get('callback'));
正如Raul Duran 所建议的那样更好,因为您不必操纵 $result。
另一个选项是回显,而不是使用响应。
【讨论】:
【参考方案5】:对于 Laravel>8,创建 JSONP 响应:
return response()
->json(['name' => 'Abigail', 'state' => 'CA'])
->withCallback($request->input('callback'));
我们应该使用 withCallback() 而不是 setCallback()
根据 Laravel docs
【讨论】:
以上是关于使用 Laravel 的 JSONP的主要内容,如果未能解决你的问题,请参考以下文章
laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy