2015-08-27 2 views
0

У меня есть простая страница блога, которая отправляет данные через ajax jquery. Он отлично работает, но на данный момент он возвращает ответ json после отправки.Laravel 5: Как отображать сообщение и перенаправлять после сообщения Ajax

Что мне нужно, это показать сообщение об успешном завершении пользователю на странице отправки, а затем перенаправить его на главную страницу статей.

Если я прокомментирую 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> 
+0

Поскольку $ реакция является массивом, сообщ будет объектом, поэтому я уверен, что Дописывать следует добавить (msg.msg), как вы также будете иметь возможность получить доступ к status (using msg.status) – Karl

+0

@ Karl, который не работал. – Halnex

ответ

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); 
    }); 

}); 
+0

Я не думаю, что это проблема. Мой код не работает в любом случае, запрос ajax не отправляется. – Halnex

+0

@Halnex Вы сказали, что он возвращается "возвращает ответ json после подачи". Сценарий работает нормально, если вы получаете ответ от сервера? – mdamia

+0

Да, но я удалил содержимое 'ArticleCreate.js' только для того, чтобы узнать, получаю ли я другую ошибку или сообщение, но нет, у меня такой же ответ json, и это потому, что в моем контроллере я возвращаюсь' return Response :: json ($ response); 'поэтому JS не состоялся. Затем я повторно добавил содержимое js и отредактировал '$ ('# frm'). On ('submit', function (e) {', потому что раньше у меня был неправильный идентификатор. Так что теперь я получаю 'POST http: // localhost/laravel-5/public/articles/create 500 (Internal Server Error) 'в консоли. – Halnex

Смежные вопросы