#php #jquery #ajax #laravel
Вопрос:
Я использовал Ajax для отправки данных контроллеру, к сожалению, когда я получаю данные, они пусты, ничего не отправляется. хотя он дает мне данные, когда я получаю их через jQuery перед отправкой.
ниже приведен код Ajax ——————-
$.ajax({ url: $('form#add-user-form').attr('action'), method: $('form#add-user-form').attr('method'), data: form.serializeArray(), processData: false, dataType: 'json', contentType: false, beforeSend:function(){ $(form).find('span.error-text').text(''); alert('working' " " user['fname']); }, success:function(data){ if (data.code == 0 ){ $.each (data.error, function(prefix, value){ alert(prefix ' ' value[0]); $(form).find('span.' prefix '_error').text(value[0]); }); alert('complete'); }else { $(form)[0].reset(); alert(data.msg) } } });
——————Метод контроллера Laravel, который получает данные —————-
public function store(Request $request) { $validator = Validator::make($request -gt; all(), ['fname' =gt; 'required|min:5|max:25', 'lname' =gt; 'required|min:5|max:25', 'email' =gt; 'required|email|unique:users', 'pass' =gt; 'required|min:8|max:20|', 'confirm-pass' =gt; 'required|min:8|max:20' ]); if (!$validator -gt; passes() ){ return response()-gt;json(['code'=gt; 0, 'error'=gt; $validator-gt;errors()-gt;toArray(), $request-gt;fname]); }else { $user = new users(); $user -gt; name = $request -gt; fname ; $user -gt; email = $request -gt; email ; $user -gt; password = $request -gt; pass; $query = $user -gt; save(); if ( !$query ){ return response() -gt; json(['code'=gt; 0, 'msg' =gt; 'something went wrong']); }else { return response() -gt; json(['code' =gt; 1, 'msg' =gt; 'users has been successfully added']); } } }
Комментарии:
1. Должно ли это быть:
$(form).serializeArray()
?2. Почему вы использовали
processData: false,
иcontentType: false,
? Вы бы сделали это только в том случае, если отправляете составнойFormData
объект3. Это не решило проблему, все то же самое.
Ответ №1:
Я нашел ответ, вместо того, чтобы использовать метод $.ajax, я заменил его функцией $.post jQuery, и все работает идеально.