Laravel 用于检测是否发送了Response::json的筛选器
我有一个过滤器。我希望此过滤器仅在页面显示HTML时起作用,而不是在json或任何其他格式时起作用Laravel 用于检测是否发送了Response::json的筛选器,laravel,filter,laravel-4,request,response,Laravel,Filter,Laravel 4,Request,Response,我有一个过滤器。我希望此过滤器仅在页面显示HTML时起作用,而不是在json或任何其他格式时起作用 App::after(function($request, $response) { if( $request->getMethod() == 'GET' && $request->getRequestFormat() == 'html' ) { // do something! } }); 在控制器函数中,我返回json数据: ret
App::after(function($request, $response)
{
if( $request->getMethod() == 'GET' && $request->getRequestFormat() == 'html' ) {
// do something!
}
});
在控制器函数中,我返回json数据:
return Response::json($data);
但是,$request->getRequestFormat()
仍然等于“html”,不应该是
我知道我可以将格式设置为“json”,如下所示:
Request::setRequestFormat('json');
return Response::json($data);
success(response) {
// Parse the json if not parsed by jQuery
var obj = $.parseJSON(response);
if(obj.success) {
$('<div/>', {id:"query-log"}).append(obj.data).appendTo('body');
}
}
但这似乎是多余的。如果我返回一个
响应::json
,它应该知道它是json而不是HTML。我如何检测它是响应::json
?这根本不是json
,它是HTML
,在div
中包含一些string
。删除div并使用以下命令传递json
:
App::after(function($request, $response)
{
if( $request->getMethod() == 'GET' && $request->getRequestFormat() == 'html' ) {
// Test if response is JSON (PHP 5.3+ needed for this)
json_decode($response);
if ( json_last_error() != JSON_ERROR_NONE ) {
// Do something
}
}
});
return Response::json($data);
然后在客户端,使用jQuery
解析json
数据,创建一个div并将数据附加到div
中,例如,在成功回调中尝试以下操作:
Request::setRequestFormat('json');
return Response::json($data);
success(response) {
// Parse the json if not parsed by jQuery
var obj = $.parseJSON(response);
if(obj.success) {
$('<div/>', {id:"query-log"}).append(obj.data).appendTo('body');
}
}
此外,您还可以使用:
$.getJSON( "url", function( data ) {
// ...
});
因此,将向服务器发送一个请求头,您可以使用以下命令检查请求是否需要json
响应:
if($request->wantsJson()) {
//
}
这是请求类中的方法:
/**
* Determine if the current request is asking for JSON in return.
*
* @return bool
*/
public function wantsJson()
{
$acceptable = $this->getAcceptableContentTypes();
return isset($acceptable[0]) && $acceptable[0] == 'application/json';
}
这根本不是一个json
,而是HTML
,它在div
中包含一些string
。删除div并使用以下命令传递json
:
return Response::json($data);
然后在客户端,使用jQuery
解析json
数据,创建一个div并将数据附加到div
中,例如,在成功回调中尝试以下操作:
Request::setRequestFormat('json');
return Response::json($data);
success(response) {
// Parse the json if not parsed by jQuery
var obj = $.parseJSON(response);
if(obj.success) {
$('<div/>', {id:"query-log"}).append(obj.data).appendTo('body');
}
}
此外,您还可以使用:
$.getJSON( "url", function( data ) {
// ...
});
因此,将向服务器发送一个请求头,您可以使用以下命令检查请求是否需要json
响应:
if($request->wantsJson()) {
//
}
这是请求类中的方法:
/**
* Determine if the current request is asking for JSON in return.
*
* @return bool
*/
public function wantsJson()
{
$acceptable = $this->getAcceptableContentTypes();
return isset($acceptable[0]) && $acceptable[0] == 'application/json';
}
requestFormat不是自动设置的—您可以通过setRequestFormat
以编程方式提供它,或者通过包含POST/GET参数\u format
来提供它
如果要检查请求是否为JSON,可以执行$request->isJson()
,但在我看来,您更像是在检查响应是否为JSON?在这种情况下,您可以执行以下操作:$response instanceof illumb\Http\JsonResponse
或$response->headers->get('Content-Type'))=='application/json'
请求格式不是自动设置的-您可以通过setRequestFormat
以编程方式提供它,或者通过包含POST/GET参数\u format
来提供它
如果要检查请求是否为JSON,可以执行$request->isJson()
,但在我看来,您更像是在检查响应是否为JSON?在这种情况下,您可以执行照亮\Http\JsonResponse的$response instanceof light\Http\JsonResponse
或$response->headers->get('Content-Type')=='application/json'
您误解了我。完全忽略这些东西,那是不必要的。我更新了问题更新了答案。只需测试响应是否为有效的JSON。如果不是,假设它一定是HTML。你误解了我。完全忽略这些东西,那是不必要的。我更新了问题更新了答案。只需测试响应是否为有效的JSON。如果不是,假设它一定是HTML。对不起,我想我不清楚。你做的与我想做的相反。我不希望查询的#以JSON显示。当然,
是HTML而不是JSON。我想检测响应是否是Json,这样我就不能显示查询的内容完全忽略这些内容,这是不必要的。我更新了问题谢谢,$request->wantsJSON()
,然后在jQuery中设置数据类型对我来说似乎是最干净的解决方案。对不起,我想我不清楚。你做的与我想做的相反。我不希望查询的#以JSON显示。当然,
是HTML而不是JSON。我想检测响应是否是Json,这样我就不能显示查询的内容完全忽略这些内容,这是不必要的。我更新了问题谢谢,$request->wantsJSON()
,然后在jQuery中设置数据类型对我来说似乎是最干净的解决方案。