Как отправить сообщение об ошибке / успехе через ajax без нажатия кнопки «Отправить» в форме (если формы нет) laravel? - PullRequest
0 голосов
/ 03 января 2019

Как отправить сообщение об ошибке / успехе через ajax без нажатия кнопки «Отправить» в форме (если формы нет)?

Я делаю проект laravel, в котором я использовал метод, когда пользователь отправляет форму, форма отправляется в контроллер (через атрибут действия формы), а внутри функции контроллера она может возвращать представление с данными и перенаправлять страницу так, появится сообщение об ошибке / успехе, и страница будет обновлена.

return redirect()->back()->with('success', 'Successfully Added!'); 

Но дело в том, что я хочу нажать кнопку, и то же самое происходит, если нет формы. Я добавил onclick для кнопки и запустил функцию js для вызова контроллера через ajax. Но после вызова контроллера вышеприведенный код работает не так, как раньше. Также нет ошибки.

<button type="button"  onclick="submit()" class="btn btn-primary"
>Submit</button> 

<script>
//when click submit button
    function submit(){
        var _token = $('input[name="_token"]').val();
        $.ajax({
            url: "{{ route('RecipeController.submit') }}",
            type: "POST",               
            data: { _token:_token                                     
            }
        })   
    }
</script>

Может кто-нибудь дать мне решение?

Ниже я добавил код сообщения, если вы этого хотите.

@if(count($errors)>0)
@foreach($errors->all() as $error)
    <div class="alert alert-danger">    
        {{$error}}
    </div>    
@endforeach
@endif

@if(session('success'))
<div class="alert alert-success">
    {{session('success')}}        
</div>    
@endif

@if(session('error'))
<div class="alert alert-danger">
    {{session('error')}}        
</div>    
@endif

Ответы [ 3 ]

0 голосов
/ 03 января 2019
 $(document).ready(function() {
               $(".removeproduct").click(function(){

                   $.ajax({
                       headers: {
                           'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
                       },
                       type : 'DELETE',
                       url  : '/user/'+report_id+'/removefromcart',
                       data  : {report_id : report_id},
                       success:function(data)
                       {
                           console.log(data);
                      },
                       error : function(data)
                       {
                           console.log(data);
                       }
                     });


                   });
               }) ;

И маршрут должен быть определен как

Route::get('/user/{id}/removefromcart','YOURCONTROLLERNAME@MethodName');
0 голосов
/ 03 января 2019
public function removeFromCart(Request $request, $report_id)
{

    $return = array();


        $check = DB::delete("DELETE FROM carts WHERE user_id='" . Auth::user()->user_id . "' AND report_id='" . $report_id . "'");
        if ($check) 
        {

            $count = Cart::where('user_id', Auth::user()->user_id)->count('id');
            $return = array('success' => true, 'message' => 'Item removed to cart', 'data' => $count);
            return response()->json($return);
        }

    } 


}
0 голосов
/ 03 января 2019

Ajax обычно ожидает JSON, поэтому обычное перенаправление или представление не будут работать.

Я могу показать вам пример:

    return response()->json(['error' => 'there was an error...'], 200);

Первый параметр - это массив с данными.Вторым является статус http.

Надеюсь, это поможет вам решить вашу проблему.:)

Редактировать: Теперь, когда у меня есть код вашего сообщения.

Вам просто нужно динамически добавить div с js при успешном выполнении ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...