【问题标题】:Laravel - Wrap JSON response in textareaLaravel - 在 textarea 中包装 JSON 响应
【发布时间】:2015-04-13 05:33:53
【问题描述】:

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

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

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

Illuminate\Support\Facades\Response

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 中是否有一种干净的方式来返回包装在文本区域中的 JSON 响应?我知道我可以简单地返回一个包裹在 textarea 中的 json_encode()ed 字符串,但我只是在寻找一种可能更清洁的 Laravel 风格的方法。

干杯

【问题讨论】:

    标签: javascript php jquery json laravel


    【解决方案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);
    

    【讨论】:

    • 太棒了!有什么是 Laravel 不能做的吗?!
    • 诀窍是 Laravel 不能做任何事情,只能尽可能地扩展,所以添加功能很简单 :)
    • @lukasgeiter 你把这段代码放在你的控制器方法中了吗?
    • @silkfire 不,您可以在app/start/global.php(或包含在其中的文件中)或服务提供商中执行此操作。 (在 Laravel 5 中,服务提供者绝对是首选方式)。请同时查看文档,因为它们也涵盖了该主题。
    • @lukasgeiter 嗯,我一直认为服务提供商就像类。在这种情况下,用户想要的只是一个微小的方法?有什么方法可以使方法静态吗? 困惑
    猜你喜欢
    • 2019-10-23
    • 2014-07-27
    • 2022-01-14
    • 1970-01-01
    • 2014-04-16
    • 2020-12-07
    • 2018-01-14
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多