在Ajax成功后刷新/重新加载页面 - Laravel

6
在我的Laravel项目中,我想在Ajax成功后刷新页面,但是我的页面在成功后不会刷新。我尝试在控制器中使用Laravel重定向来刷新,但它没有起作用,我还尝试在Ajax中刷新,但什么也没发生。我应该如何正确地实现这个功能? 控制器:
if(request()->ajax()) {

            //do something             
            return ['success' => 'successfully done'];
            return redirect('admin/all')->with('status','Successfully done!');

JS

<script type="text/javascript">

        $('#master').on('click', function(e) {
         if($(this).is(':checked',true))  
         {
            $(".sub_chk").prop('checked', true);  
         } else {  
            $(".sub_chk").prop('checked',false);  
         }  
        });

        $('.approve_all').on('click', function(e) {

            var allVals = [];  
            $(".sub_chk:checked").each(function() {  
                allVals.push($(this).attr('data-id'));
            });  

            if(allVals.length <=0)  
            {  
                alert("Please select row.");  
            } 

            else {  



                var check = confirm("Are you sure you want to delete this row?");  
                if(check == true){  

                    var join_selected_values = allVals.join(","); 

                    $.ajax({
                        url: $(this).data('url'),
                        type: 'GET',
                        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                        data: 'ids='+join_selected_values,

                        success: function (data) {
                            if (data['success']) 
                            {

                                $("#" + data['tr']).slideUp("slow");
                                alert(data['success']);
                                location="/admin/all";


                            } 
                            else if (data['error']) 
                            {
                                alert(data['error']);
                            } 
                            else 
                            {
                                //alert('Whoops Something went wrong!!');
                            }
                        },
                        error: function (data) {
                            alert(data.responseText);
                        }
                    });
                                window.location.href="/your/url" ;

                  $.each(allVals, function( index, value ) 
                  {
                      $('table tr').filter("[data-row-id='" + value + "']").remove();
                  });
                }  

            }  


        $('[data-toggle=confirmation]').confirmation({
            rootSelector: '[data-toggle=confirmation]',
            onConfirm: function (event, element) {
                element.trigger('confirm');
            }
        });

        $(document).on('confirm', function (e) {
            var ele = e.target;
            e.preventDefault();

            $.ajax({
                url: ele.href,
                type: 'GET',
                headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
                success: function (data) {
                    if (data['success']) 
                    {

                        $("#" + data['tr']).slideUp("slow");
                        alert(data['success']);
                        location="/admin/all";

                    } 
                    else if (data['error']) {
                        alert(data['error']);
                    } 
                    else 
                    {
                        alert('Whoops Something went wrong!!');
                    }
                },
                error: function (data) {
                    alert(data.responseText);
                }
            });

            return false;
        });



    });

</script>
3个回答

8
您需要使用JavaScript来刷新页面。您可以使用location.reload()
 if ( data['success'] ) 
 {
     alert(data['success']);
     location.reload();
 } 

什么也没发生……我必须手动刷新页面才能看到变化。 - pogba
你能看到警告吗?data['success']的值是多少? - Eddie
请查看我的控制器更新...当Ajax成功时,我的成功值删除成功将显示。 - pogba

1
如果您仍在寻找解决方案,以下是如何解决此问题的方法。
首先,在您的控制器中只返回一个简单的消息。
class SettingsController extends Controller
{

public function __construct()
    {

    }

public function destroy($id)
    {

        $user = User::findOrFail($id);
        $user->delete();
        return 'Record successfully deleted';
    }
}

其次,在您的JavaScript文件中添加此代码以刷新页面.

setTimeout(function () { document.location.reload(true); }, 5000);

<script type="text/javascript">

        function deluser(id)
         {
            event.preventDefault();

            $.ajax({
             headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
             url:"{{ route('settings.destroy','')}}/"+parseInt(id),
             method: 'delete',
             data:{
                 id: id,
                 },
success: function(data)
            {
                $('#validation-message').append('<div class="alert dark alert-success alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span> </button><b>'+data+'</b></div>');
                setTimeout(function () { document.location.reload(true); }, 5000);

             },
            error: function(xhr)
            {
                $('#validation-message').html('');
                $.each(xhr.responseJSON.errors, function(key,value) {
                    $('#validation-message').append('<div class="alert dark alert-danger alert-dismissible" role="alert"><button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span> </button><b>'+value+'</b></div>');
                    });
            }
            });
         }

      </script>

最终在你的HTML中。
<!DOCTYPE html>
<html>
<body>
<div class="col-xl-12 form-group" id="validation-message"></div>
<button onclick="deluser('ID_NUMBER_GOES_HERE')">Click me</button>
</body>
</html>

0
您可以尝试像这样的代码:
 if (data['success']) 
 {
 $("#" + data['tr']).slideUp("slow");
 location.reload();
 } 

什么也没有发生...我必须手动刷新页面才能看到更改。 - pogba
请检查控制台中是否有JavaScript错误。 - Soubhagya Kumar Barik
没有错误,因为我的警报在成功时弹出。请查看我的更新。 - pogba
尝试使用以下代码:window.location.reload(true); - Soubhagya Kumar Barik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接