Php laravel 4为什么在发送json时发送内容类型?

Php laravel 4为什么在发送json时发送内容类型?,php,laravel,Php,Laravel,在我读过的laravel的书中,还有我的同事,他有laravel的经验,他说我应该以laravel的方式生成JSON 为什么我需要这样做: Route::get('markdown/response', function() { $data = array('iron', 'man', 'rocks'); return Response::json($data); }); 正如我所读到的,当使用它时,它也发送内容类型头 当我使用codeigniter时,我通常只做以下几点: e

在我读过的laravel的书中,还有我的同事,他有laravel的经验,他说我应该以laravel的方式生成JSON

为什么我需要这样做:

Route::get('markdown/response', function()
{
    $data = array('iron', 'man', 'rocks');
    return Response::json($data);
});
正如我所读到的,当使用它时,它也发送内容类型头

当我使用codeigniter时,我通常只做以下几点:

echo json_endode($data);
从来没有遇到过任何问题。即使未设置内容类型。实际上我不知道php是否会自动设置它,但因为我没有问题,所以我不在乎


当使用“新”技术时,我真的想知道为什么它比好的旧技术好。

取决于您对路线的尝试。如果您只想返回json数据,那么只需返回json_encode($data),这就行了,要实际返回json响应以用于ajax请求,您需要正确设置标头,或者接受路由认为它获得了字符串。Response::json用于设置响应,从而适当地设置头。

Response::json
返回的响应对象(以及其他
Response
静态方法)是高度可修改的

$response = Response::json($data);
$response->header('Content-Type', 'application/json');
return $response;
您可以在Laravel和Symfony代码API中查看更多可用的方法


恕我直言,如果不提供
内容类型
标题,那么在CodeIgniter中编码时,您就犯了“错误”

大多数客户机(浏览器、ajax请求,尤其是jQuery)仍然可以猜测如何正确处理响应,因此可能对您“起作用”。您可能总是隐式地返回带有响应的
内容类型:text/html
,这是CodeIgniter中的默认标题

您应该始终在HTTP响应中返回适当的内容类型,以便消费客户端知道如何处理此内容请注意,这是一种语言,不特定于任何框架或语言。

Response::json()
上面的代码只是一个方便的函数,Laravel将自动为您设置
application/json
头,并将数据数组转换为json格式。正如您所指出的,与CodeIgniter代码唯一有效的区别是头部的设置


值得注意的是,Response对象扩展了Symfony的Response对象,它非常“强大”——换句话说,它是HTTP协议的一个非常好的实现。

仅仅因为它工作了并不意味着它没有错。JSON不是HTML,因此对它来说,
text/HTML
是不准确的
内容类型


发送正确的头意味着像jQuery这样的库能够理解它们要返回的数据类型,因此能够在没有指导的情况下自行处理这些数据。浏览器也可以做一些事情,比如漂亮地打印JSON数据或使其更易于阅读。

使用ajax请求时,我不需要设置内容类型。至少在codeigniter中,我使用了大量ajax请求,在javascript中工作得很好。至少使用jquery或backbone.js。所以我还是不明白:)是的,注意到使用jquery,我不需要只使用pasreJSON或添加'json'参数,它会自动将其视为对象。在我看来,这并不是什么大事,但更好。