Laravel 5:如何在Ajax发布后显示消息并重定向

时间:2015-08-27 16:23:37

标签: jquery ajax laravel laravel-5 laravel-5.1

我有一个简单的博客帖子页面,通过ajax jquery提交数据。 它工作正常,但目前,它在提交后返回json响应。

我需要做的是在提交页面上向用户显示成功消息,然后将其重定向到主要文章页面。

如果我发表评论return Response::json($response);我会得到一个空白页但我不想自动将他重定向到另一个视图,我想向他显示一条消息5秒然后重定向他。

$("#ajaxResponse").append(msg);并没有做任何事情。

这是我的控制器

public function store(Requests\ArticleRequest $request)
    {

        $article = new Article($request->all());
        Auth::user()->articles()->save($article);

        $response = array(
            'status' => 'success',
            'msg' => 'Setting created successfully',
        );

        return \Response::json($response);
    }

这是AJAX请求

$(document).ready(function() {
    $('#submit').on('submit', function (e) {
        e.preventDefault();
        var title = $('#title').val();
        var body = $('#body').val();
        var published_at = $('#published_at').val();
        $.ajax({
            type: "POST",
            url: host + '/articles/create',
            data: {title: title, body: body, published_at: published_at},
            success: function( msg ) {
                $("#ajaxResponse").append(msg);
            }
        });
    });
});

这是视图

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">

<h1>Write a New Article</h1>

<hr>

{!! Form::open(['url' => 'articles']) !!}
    <p>
        {!! Form::label('title', 'Title:') !!}
        {!! Form::text('title') !!}
    </p>

    <p>
        {!! Form::label('body', 'Body:') !!}
        {!! Form::textarea('body') !!}
    </p>

    <p>
        {!! Form::label('published_at', 'Date:') !!}
        {!! Form::input('date', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
    </p>

    <p>
        {!! Form::submit('Submit Article', ['id' => 'submit']) !!}
    </p>
{!! Form::close() !!}

<h3 id="ajaxResponse"></h3>

@if($errors->any())
    <ul>
    @foreach($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    </ul>
@endif

<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="{{ URL::asset('assets/js/ArticleCreate.js') }}"></script>

1 个答案:

答案 0 :(得分:1)

您需要在从服务器返回响应后设置超时。试试这个并根据需要进行调整。见下面的例子。

return \Response::json($response);

在你的js中

$(document).ready(function() {
  $('#submit').on('submit', function (e) {
    e.preventDefault();
    var title = $('#title').val();
    var body = $('#body').val();
    var published_at = $('#published_at').val();
    $.ajax({
        type: "POST",
        url: host + '/articles/create',
        data: {title: title, body: body, published_at: published_at},
        success: function( data) {
            console.log(data);
            if(data.status == 'success') {
              alert(data.msg);
               setInterval(function () {
                alert("Hello");
               }, 3000);

            }else{
                alert('error');
                console.log(msg);
            }
        }
    });
  });
});

根据需要调整adpat到您的代码。

js fiddle example

$(document).ready(function () {
  $('.alert-me').click(function () {
    setInterval(function () {
        alert("Hello");
    }, 3000);
  });

});