javascript - Laravel 5.6 通过 ajax 调用将 Blade 注入(inject) View

标签 javascript php laravel

我需要通过 ajax 调用将一些 Blade 逻辑注入(inject)到我的 View 中。 我不确定这是否可能或者是否还有其他方法?

我正在尝试做的事情:

axios.post('/buildingimage', formData, { headers: {'Content-Type': 'multipart/form-data' }})
        .then(response => {
            e.preventDefault();

            $('.errorMessages').hide();
            let building = response.data.building;

            let resultInfo = "";

            $('.successMessages').show();

            let newBuilding = "<tr>" +
                "                  <td>" + building.location + " </td>" +
                "                  <td>" + building.source + "</td>" +
                "                  <td>" + building.disc + "</td>" +
                "                  <td>" + building.result + "</td>" +
                "                  <td>" + resultInfo + "</td>" +
                "                  <td> Edit form </td>" +
                "                  @can('Delete buildings')" +
                "                  <td>" +
                "                      {!! Form::open(['class' => 'deleteBuildingForm', 'method' => 'DELETE', 'route' => ['buildingimage.destroy', " + building.id + "] ]) !!}" +
                "                              <button type='submit' class='btn btn-danger'>" +
                "                              <i class='far fa-trash-alt'></i>" +
                "                          </button>" +
                "                      {!! Form::close() !!}" +
                "                  </td>" +
                "                  @endcan" +
                "              </tr>";

            $(".buildingsTable > tbody:last-child").append(newBuilding);
        })
        .catch(error => {
            if (error.response) {
                $('.errorMessages').show();
                $('.successMessages').hide();

                $.each(error.response.data.errors, function(key, value) {
                    $('.errorMessagesList').append('<li>' + value + '</li>');
                });
            }
    });

正如您所看到的,我尝试呈现的表单在我看来实际上并不是表单,而只是生成一个字符串。我不知道如何解决这个问题。

棘手的部分是它应该位于表的 td 中。

最佳答案

我假设您有一个 JSON 响应?在这种情况下,您可以通过使用 View Factory 类上的 render() 方法直接渲染 View 来实现。

return response()->json([
    'data' => [
        'building' => $buildingCollection,
        'view' => view('path.to.view')->render(),
    ],
]);

此时您的 javascript trtd 应该是不必要的。

您的表格渲染逻辑可以位于服务器端而不是前端。我个人的偏好是在前端呈现它。

关于javascript - Laravel 5.6 通过 ajax 调用将 Blade 注入(inject) View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297215/

相关文章:

php - 什么是嵌套模型?它与 Joomla 的菜单项有什么关系?

javascript - jQuery |如何从其他html中获取iframe的属性?

javascript - 什么可以覆盖 html 输入中的属性?

php:从字符串的开头和结尾删除 <p>、</p>、<br> 和 <br/>

Laravel 实时与 socket.io

php - 如何在 Laravel 中自定义作业的日志输出?

laravel - 许多使用 https 和 nginx 的重定向

javascript - 将 es6 react 变量转换为四舍五入到最接近的 10

javascript - 如何从后端服务文件返回新的promise对象到后端 Controller ?

PHP 根据 <selection> 中的选定选项检索 mysql 存储的字符数据返回错误的字符