3

浏览器向 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 变体。

4

5 回答 5

25

你可以在 Lavavel 4 中做到这一点:(原文:Tu puedes hacer esto en Laravel 4)

Response::json($result)->setCallback(Input::get('callback'));
于 2013-07-02T15:27:15.397 回答
4

您可以在 Response::json() 调用中提供标头。

Response::json($result, 200, array('Content-Type' => 'application/javascript'));

JSONP 的正确 MIME 类型是 application/javascript。

于 2012-12-06T16:06:58.697 回答
4
Response::json($result)->setCallback(Input::get('callback'));

正如Raul Duran所建议的那样更好,因为您不必操纵 $result。

另一个选项是回显,而不是使用响应。

于 2013-10-03T15:51:10.380 回答
4

对于 Laravel(5.1 及以上)或 Lumen(5.1 及以上):

如果您想创建 JSONP 响应,除了 setCallback 之外,您还可以使用 JSON 方法:

return response()
    ->json(['name' => 'Abigail', 'state' => 'CA'])
    ->setCallback($request->input('callback'));
于 2018-04-20T06:12:18.803 回答
0

对于 Laravel>8,创建 JSONP 响应:

return response()
        ->json(['name' => 'Abigail', 'state' => 'CA'])
        ->withCallback($request->input('callback'));

我们应该使用withCallback()而不是setCallback()

根据 Laravel文档

于 2020-12-28T07:26:36.257 回答