#javascript #jquery #laravel
#javascript #jquery #laravel
Вопрос:
Я хочу, чтобы пользователь комментировал без перезагрузки своей страницы. Для этого я применил ajax через jquery. Когда приходит ответ, я добавляю HTML-код в блейд.
success: function(res)
{
var first_name = res.first_name;
var last_name = res.last_name;
var profilepic = res.profilepic;
var created_at = res.created_at;
$('.profile_comment').prepend(
'<div class="others_comment d-flex mb-15">'
'<div class="users-img">'
'<img @if(!empty(' profilepic ')) src="{{URL::asset("uploads/memberprofile/" . ' profilepic ')}}" @else src="{{URL::asset("member/assets/images/user.png")}}" @endif alt="user" class="img-fluid">'
'</div>'
'<div class="user_side">'
'<div class="d-flex">'
'<h6 class="name">{{ucfirst(' first_name ')}} {{ucfirst(' last_name ')}}</h6>'
'@php $date= date("F d,Y", strtotime(' created_at ')); @endphp'
'<p class="ml-auto font-xs">{{$date}}</p>'
'</div>'
'<p class="comment">{{ucfirst(' comment ')}}</p>'
'<div class="footer_comment d-flex">'
'<button class="btn-none ml-auto"> <img src="{{URL::asset("member/assets/images/option.svg")}}" alt="option" class="img-fluid"> </button>'
'</div>'
'</div>'
'</div>'
);
Это код, который я пробовал до сих пор. Но это не показывает значение внутри переменной.
Комментарии:
1. можете ли вы также показать HTML-код, если хотите получить ответ быстро или более совершенный, просто предоставьте дополнительную информацию, пожалуйста
Ответ №1:
Это классическая проблема при работе с Blade и JavaScript. Способ работы Blade заключается в том, что он просматривает ваш шаблон, а затем компилирует его в соответствующий .php
файл, который браузер может интерпретировать.
Что здесь происходит, так это то, что перед выполнением любого скрипта blade выполнит все его директивы. Например, строка ниже:
'<img @if(!empty(' profilepic ')) src="{{URL::asset("uploads/memberprofile/" . ' profilepic ')}}" @else src="{{URL::asset("member/assets/images/user.png")}}" @endif alt="user" class="img-fluid">'
Преобразуется во что-то похожее на
'<img src="localhost/storage/uploads/memberprofile/ profilepic " alt="user" class="img-fluid">'
перед выполнением любых сценариев (то есть перед вызовом ajax). Я сталкивался с этой проблемой раньше, и в зависимости от того, насколько сложным был вариант использования, я решил его 2 способами, вам решать, какой из них выбрать:
- Используйте JS для всего в вашем обратном вызове ajax и используйте переменные, которые вы получаете из ответа:
first_name
,last_name
и т.д. Это может стать довольно утомительным, если у вас сложная логика или вы используете много PHP во внешнем интерфейсе. - Сгенерируйте HTML-элементы на стороне сервера и отправьте обратно весь html в виде строки.
// server side
return response()->json(['element' => $elementString]);
// client side
$('.profile_comment').prepend(res.element);