#php #ajax #laravel #attachment #sweetalert
Вопрос:
Когда я ввожу данные, вложенные данные не заполняются
Я использую Laravel для отправки почты с вложением, это работает, но после того, как я добавлю ajax sweet alert, невозможно прикрепить файл из входных данных, он просто игнорирует его и пишет Call to a member function getRealPath() on null
Это отправленный контроллер
public function send(Request $request) { $data = [ 'name' =gt; $request-gt;name, 'position' =gt; $request-gt;position, 'phone' =gt; $request-gt;phone, 'social' =gt; $request-gt;social, 'description' =gt; $request-gt;description, 'file' =gt; $request-gt;file('file') ]; $to = 'nusamznaew@yandex.kz'; Mail::to($to)-gt;send(new SendMail($data)); return redirect('/'); }
Это функция почтовой рассылки:
public function build() { $name = $this-gt;data['name']; $position = $this-gt;data['position']; $phone = $this-gt;data['phone']; $social = $this-gt;data['social']; $description = $this-gt;data['description']; return $this-gt;subject('Subject Email') -gt;view('mail.mail', compact('name', 'position', 'phone', 'social', 'description')) -gt;attach($this-gt;data['file']-gt;getRealPath(), [ 'as' =gt; $this-gt;data['file']-gt;getClientOriginalName() ]); }
Это работало, пока я не добавил ajax SweetAlert
$(document).ready(function () { $(".ajax-form").submit(function (e) { e.preventDefault(); /*Ajax Request Header setup*/ $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ method: 'POST', url: '{{route("vacancy.send")}}', data: $(this).serialize(), success: function (response) { swal({ title: "Спасибо ваша заявка принята!", icon: "success", text: "Скоро наш менеджер с Вами свяжется", showCancelButton: true, confirmButtonColor: "#fff", }) } }); }); });
Комментарии:
1.
it works, but after I add ajax sweet alert, it is not
какие-нибудь ошибки в консоли? какая-нибудь информация об отладке PHP?
Ответ №1:
Проблема в том, что вы отправляете данные с помощью ajax, но в контроллере вы повторно перенаправляете
если изменить на это
return redirect('/');
к этому
return response()-gt;json(["status" =gt; "success"]);
и jquery делают вот так
$(document).ready(function () { $(".ajax-form").submit(function (e) { e.preventDefault(); /*Ajax Request Header setup*/ $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } }); $.ajax({ method: 'POST', url: '{{route("vacancy.send")}}', data: $(this).serialize(), success: function (response) { if(response.status === "success"){ swal({ title: "Спасибо ваша заявка принята!", icon: "success", text: "Скоро наш менеджер с Вами свяжется", showCancelButton: true, confirmButtonColor: "#fff", }) } } }); }); });
я надеюсь, что это сработает.