Laravel - 在textarea中包装JSON响应

时间:2015-02-12 13:04:09

标签: javascript php jquery json laravel

我正在使用jQuery form plugin处理通过AJAX提交表单。

在不支持通过AJAX上传文件的旧浏览器上上传文件(而不是使用隐藏的iframe)并返回JSON响应时,recommended将响应包装在textarea中。

现在在我的Laravel服务器端,如果请求不是AJAX,我想返回一个包含在textarea中的JSON响应。通常,要返回JSON响应,我会使用return Response::json($value);,但这不允许我将我的响应包装在textarea中。

照亮\支持\外墙\响应

public static function json($data = array(), $status = 200, array $headers = array(), $options = 0)
{
    if ($data instanceof ArrayableInterface)
    {
        $data = $data->toArray();
    }

    return new JsonResponse($data, $status, $headers, $options);
}

Laravel中是否有一种干净的方式来返回包含在textarea中的JSON响应?我知道我可以简单地返回一个包裹在textarea中的json_encode() ed字符串,但我只是在寻找一种可能更清晰的Laravel风格方法。

干杯

1 个答案:

答案 0 :(得分:1)

我建议您为此创建一个Response Macro

Response::macro('myjson', function($data = array(), $status = 200, array $headers = array(), $options = 0){
    $response = Response::json($data, $status, $headers, $options);
    if(!Request::ajax()){
        return Response::make('<textarea>'.$response->getContent().'</textarea>', $status, $headers);
    }
    return $response;
}

用法:(与Response::json()完全相同)

return Respones::myjson($value);