如何返回正确的JSON响应以使用Froala与Laravel

时间:2016-05-19 18:48:38

标签: php jquery json ajax laravel

我试图在Laravel 5.2.29中使用Froala文本编辑器。我按照文档来设置freya,它的效果很棒!直到我尝试上传一些东西。我可以使用普通的html文件按钮上传文件没有问题,但由于某种原因,ajax请求似乎无法到达我的控制器。我无法弄清楚为什么。

这是我的JQuery代码,它位于带编辑器的页面上(我使用了Froala文档来编写):

<script>
$(function() {
  $('#body, #excerpt').froalaEditor({
            toolbarButtons: ['undo', 'redo', 'html', '-', 'fontSize', 'paragraphFormat', 'align', 'quote', '|', 'formatOL', 'formatUL', '|', 'bold', 'italic', 'underline', '|', 'insertLink', 'insertImage', 'insertVideo', 'insertFile', 'insertTable'],
            heightMin: 300,
            imageUploadParam: 'file',
            imageUploadMethod: 'POST',
            // Set the image upload URL.
            imageUploadURL: '/fileUpload/{{ $department->id }}/post',
            // Pass the department id
            imageUploadParams: {
                id: {{ $department->id }},
                froala: 'true'
            }
        });
    });
</script>

我创建了一个test.php文件,其中包含以下代码,使用froala文档方法对其进行测试,解决此问题并且可以正常工作:

<?php
// Generate response.
        $response = new StdClass;
        $response->link = "http://my.server/image.jpg";
        echo stripslashes(json_encode($response));

        ?>

但由于某种原因,laravel不会返回正确的json响应。来自test.php文件的json响应是`{&#34; link&#34;:&#34; http://my.server/image.jpg&#34;}&#39;当我直接导航它。但是当我在路线文件中测试它时(甚至在控制器中也没有测试它),我做了一个看起来像这样的路线:

Route::get('/test', function(){
        return stripslashes(response()->json(['link' => "http://my.server/image.jpg"])->content());
        // echo '{"link":"http://my.server/image.jpg"}';
    });

这会返回{"link":"http://my.server/image.jpg"},这对我来说看起来完全一样。但是当我在POST请求之后返回它时,它只是说“出了问题,请再试一次。”#39;

我做错了什么?

1 个答案:

答案 0 :(得分:0)

有几个问题,但最令人困惑(但应该很明显)的答案之一是传递一个csrf令牌作为laravel需要。这意味着将'_token': {!! csrf_token() !!}添加到jquery中的imageUploadParams项。我在这里完成了完整的设置指南:http://thelightmedia.net/blog/using-froala-to-upload-images-with-laravel-5-2