如何使用 Ajax 在 Laravel 中添加/包含视图

Posted

技术标签:

【中文标题】如何使用 Ajax 在 Laravel 中添加/包含视图【英文标题】:How to add/include views in Laravel using Ajax 【发布时间】:2016-12-10 06:12:33 【问题描述】:

我有点卡在一个地方。我有一些小的html sections 的视图,当它们组合在一起时,会给出完整的 HTML 页面。我正在尝试用Jquery 构建一个website builder,其中我有一个drop event,它添加了那些特定的views

例如我有HTML 对应slideshow

<div id="slideshow" data-nitsid="2">
    <div class="revolution-slider">
        <ul>
            <!-- SLIDE  -->
            @foreach($contents->slider as $sliders)
                <li data-transition=" $sliders->transition " data-slotamount=" $sliders->slotamount " data-masterspeed=" $sliders->masterspeed ">
                    <!-- MAIN IMAGE -->
                    <img src=" URL::asset($sliders->url) " >
                </li>
            @endforeach
        </ul>
    </div>
</div>

在我的JQuery 代码中:

nitsbuilder.dropeventhandler = function ($item, $position) 
    var nits_id = $item.data('nitsid');
    $.ajax(
        method: 'POST',
        url: dropurl,
        data:  nits_id: nits_id, _token: token,
        dataType: 'json',
        success: function (data) 
            nitsbuilder.adder($item, $position, data);
        
    );


database 中有html codes 之前,拉出html 并添加到HTML 页面更容易,现在我有html in views,我怎么能push/include 这个HTML codeviewajax request 以便我的 nitsbuilder.adder 函数执行通过我的控制器放置视图。

我现在的Controller是:

class DropeventController extends Controller

    public function htmlcode(Request $request)
    
        $pluginid = $request['nits_id'];
        $code = Plugins::findOrFail($pluginid);
        $htmlcode = $code->code;
        return response()->json(['htmlcode' => $htmlcode]);
    


请指导我。谢谢

【问题讨论】:

你能从你的代码中删除已经正常工作的东西吗?显示您的实际 ajax 调用、路由和控制器应该足够了,也许可以在此处添加您正在使用的迁移/表结构 @FrankProvost 完成! 那么目前你将你的 html sn-ps 存储在数据库中?而且您更愿意返回刀片视图? @FrankProvost 是的! 我会写一个答案 - 给我一秒钟 【参考方案1】:

假设您的 html 在名为 abc.blade.php 的视图文件中,您可以从控制器以 json 格式返回呈现的视图。

return response()->json([
'htmlcode' => View::make('abc')->render();
]);

【讨论】:

【参考方案2】:

您可以使用 \View::make 从刀片视图轻松创建 html 字符串

例如假设您有以下文件夹结构

项目 ... 资源 查看次数 sn-ps sn-pA sn-pB

您现在可以创建一个接受“名称”参数的路由/控制器,然后执行以下操作

$name = "snippetA"; // get this from parameters

$html = \View::make("snippets.$name")->render();

您可能还需要根据您的视图添加变量

$name = "snippetA"; // get this from parameters
$errors = []; // error variable might be needed

$html = \View::make("snippets.$name", compact('errors'))->render();

然后你可以返回这个 html 字符串

return ['html' => $html];

并从您的 ajax done 函数中访问它。

希望对你有帮助

【讨论】:

这正是我想要的。非常感谢!

以上是关于如何使用 Ajax 在 Laravel 中添加/包含视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中使用 jQuery ajax 请求自动添加 X-CSRF-TOKEN

如何使用ajax在laravel中保存多行表单?

如何在 laravel js 文件中添加 ajax URL?

如何在 laravel 5.3 中使用 ajax

如何在 ajax 调用时从 laravel 控制器函数返回视图?

如何在 Laravel 中使用第三方包?