我需要通过 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 tr
和 td
应该是不必要的。
您的表格渲染逻辑可以位于服务器端而不是前端。我个人的偏好是在前端呈现它。
关于javascript - Laravel 5.6 通过 ajax 调用将 Blade 注入(inject) View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53297215/