Подтверждение модального удаления laravel не идет на уничтожение маршрута

Когда я запускаю этот код с закомментированным сценарием модального диалога, я вижу всплывающее сообщение моего контроллера. Когда я пробую это со скриптом, появляется модальное всплывающее окно, но нажатие кнопки «ОК» или «Отмена» ничего не делает. Я подозреваю, что это как-то связано с «attr('action')», но я не смог найти для него документацию и не уверен, как заставить его направлять на контроллер. Я попытался изменить «действие» на «уничтожить» и «удалить», но это не сработало.

          <td> {{Form::open(array('method'=>'DELETE', 'route' => array('users.destroy', $user->id)))}} 
               {{Form::submit('Delete', array('class'=>'btn btn-danger'))}}
               {{Form::close()}}
          </td>

сценарий

<script>
$(document).ready(function(){
   $('.btn-danger').submit(function(e){
     e.preventDefault();
     url = $(this).parent().attr('action');
     BootstrapDialog.confirm('Are you sure you want to delete?', function(result){
       if(result) {
         $.ajax(url);
       }
     });
   });
});
</script>

Контроллер

public function destroy($id)
{
    print_r($id);
//       User::find($id)->delete();
//      return View::make('hello');
        Response::json(['message'=>'Delete was successful']);

}

В моих маршрутах у меня есть

Route::resource('users', 'UserController');

запуск маршрутов php artisan, которые он показывает

URI: DELETE users/{users} | Name: users.destroy | Action: UserController@destroy

Изменение строки jquery, как показано ниже, приведет к сообщению контроллера, но модальное подтверждение теперь отсутствует.

url = $(this).parent().attr('action');
BootstrapDialog.confirm('Are you sure you want to delete?', function(result){
if(result) {
   $.ajax({url:url, 
           type:"DELETE",
           success: function(data, textStatus, jqXHR) {
                    alert(data.message + textStatus + jqXHR.responseText);},
           error: function(jqXHR, textStatus, errorThrown) {
                    alert('Failure: ' + textStatus + ". Error: " + errorThrown);}
           });

person Phil    schedule 04.09.2014    source источник


Ответы (1)


Как выглядит ваш файл Routes.php?

Убедитесь, что у вас есть Route::delete('users/{id}', ['uses' => 'UsersController@destroy', 'as'=>'users.destroy']);

Во-вторых, если вы используете ajax, вам нужно убедиться, что вы определили параметр «тип» для ajax, чтобы убедиться, что он установлен на type: 'DELETE', иначе jQuery.ajax() будет использовать «POST» по умолчанию. См. здесь: http://api.jquery.com/jquery.ajax/

Изменить: просто указав, что атрибут «действие» просто указывает форму на URL-адрес, на который она должна отправлять сообщения, он не определяет МЕТОД (POST, GET, PUT, DELETE), который он должен использовать.

person bgallagh3r    schedule 04.09.2014
comment
Спасибо! Я изменил строку jquery, чтобы установить тип DELETE и действие для удаления, и теперь это работает. - person Phil; 04.09.2014
comment
на самом деле я скоро говорил, вставка этой строки нарушила модальное подтверждение, но продолжала отображать всплывающее сообщение контроллера - person Phil; 04.09.2014
comment
Не уверен, что это изменение jquery работает. Попробуйте $.ajax({url: url, type :"DELETE"}); Также проверьте, какой результат на самом деле возвращается, когда вы отменяете подтверждение. - person bgallagh3r; 05.09.2014
comment
Я использовал несколько окон предупреждений, чтобы увидеть, что я получаю «результат = истина» для окна подтверждения. Однако URL = undefined. Я так и не понял, как его правильно сформировать. - person Phil; 05.09.2014
comment
Кстати, я вижу проблему в вашем JS. У вас есть $(this).parent().attr(), где $(this) относится к форме, если вы удалите .parent(), это должно работать! - person bgallagh3r; 06.09.2014
comment
Я исправил js и URL-адрес (и исправил атрибут обратно на «действие»), и теперь переменная URL-адреса говорит 10.10.15.30:8000/users/10 однако после нажатия кнопки «Да» я все еще нахожусь на той же странице/состоянии. Я не получаю свое всплывающее сообщение об отладке из моей функции уничтожения, отображающей... - person Phil; 08.09.2014
comment
Вы можете ЗАПУСТИТЬ js, который вы передаете обратно через эхо, автоматически, это не так, вам нужно запустить обратный вызов «успех» и «ошибка», который срабатывает таким образом. Вы МОЖЕТЕ вернуть сообщение и успешно запустить предупреждение, содержащее msg. В вашем методе уничтожения вы должны return Response::json(['message'=>'Delete was successful']); затем в ajax запустить обратный вызов в случае успеха следующим образом: $.ajax().success(function($data, $textStatus, $jqXHR) { alert(data.message); }); - person bgallagh3r; 08.09.2014
comment
Спасибо, я добавил ваш обратный вызов с некоторыми изменениями, как показано в моем редактировании. Он приходит с «неопределенным успехом». Однако теперь моя запись будет удалена, если я раскомментирую строку удаления, но мне нужно обновить страницу, чтобы увидеть ее обновление :( есть идеи, как заставить ее автоматически отображать обновление? мне нужно отправить команду обновления на страницу? - person Phil; 08.09.2014
comment
Вы должны просто зайти на #laravel IRC на freenode.net и найти меня на канале (то же самое имя пользователя). Я, вероятно, смогу помочь вам лучше, чем отвечать через комментарии здесь. - person bgallagh3r; 08.09.2014
comment
Большое спасибо за Вашу помощь! Моя первоначальная проблема решена, так что я больше не буду беспокоить вас вещами, с которыми, вероятно, смогу разобраться самостоятельно. Я посмотрю #laravel в IRC, спасибо! - person Phil; 09.09.2014