Laravel 5.2& AJAX - 重定向后显示成功消息

时间:2016-06-09 10:35:39

标签: ajax laravel laravel-5.2 bootstrap-modal

我正在L5.2中创建一个CRUD系统,并使用Bootstrap Modal来显示表单。我已经使用BootFormsLaravel Bootstrap Modal Form来验证表单并在Modal中显示错误消息而不关闭它。

基本上我在同一页面上的模态中打开添加/编辑表单,表单验证在Modal中完成,一旦一切正常,数据将被插入数据库并且模式关闭。之后页面刷新并显示更新的数据。

一切正常,除非成功,否则我无法在我的页面上显示成功消息。

以下是我的代码:

AJAX

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], ...) ]
  [COMMENT view_comment]
  [TBLPROPERTIES (property_name = property_value, ...)]
  AS SELECT ...;

控制器:

$.ajax({
    type: "POST",
    url: url,
    data: data,
    dataType: 'json',
    cache: false,
    contentType: contentType,
    processData: false

// Response.
}).always(function(response, status) {

    // Reset errors.
    resetModalFormErrors();

    // Check for errors.
    if (response.status == 422) {
        var errors = $.parseJSON(response.responseText);

        // Iterate through errors object.
        $.each(errors, function(field, message) {
            console.error(field+': '+message);
            var formGroup = $('[name='+field+']', form).closest('.form-group');
            formGroup.addClass('has-error').append('<p class="help-block">'+message+'</p>');
        });

        // Reset submit.
        if (submit.is('button')) {
            submit.html(submitOriginal);
        } else if (submit.is('input')) {
            submit.val(submitOriginal);
        }

    // If successful, reload.
    } else {
        location.reload();
    }
});

查看:(显示成功消息)

public function store(CustomerRequest $request)
{
    Customer::create($request->all());

    return redirect('customers')
        ->with('message', 'New customer added successfully.')
        ->with('message-type', 'success');
}

如果成功,AJAX只是重新加载页面,我希望它重定向到Controller函数中指定的页面并显示该成功消息。

1 个答案:

答案 0 :(得分:9)

您正在从响应中返回HTTP重定向,该重定向不适用于AJAX请求。诸如浏览器之类的客户端将能够拦截并使用标题信息,然后重新加载页面。

相反,对于您的特定问题,请考虑:

https://laravel.com/docs/5.2/session#flash-data

public function store(CustomerRequest $request)
{
    Customer::create($request->all());

    $request->session()->flash('message', 'New customer added successfully.');
    $request->session()->flash('message-type', 'success');

    return response()->json(['status'=>'Hooray']);
}

现在,您的AJAX收到的HTTP/200 OK响应将执行location.reload,并且视图可以使用闪烁的会话数据。