показать статус выполнения jquery ajax - PullRequest
3 голосов
/ 16 марта 2012

Допустим, я выполняю ajax-вызов для некоторого действия контроллера cakePHP, чтобы удалить некоторые данные из базы данных. Но прежде чем удалить данные (что, конечно, происходит в моем действии контроллера cakePHP), я хочу проверить, есть ли у пользователя, который запрашивает удаление данных, разрешение на это. Я пытаюсь показать пользователю шаги выполнения, например, у меня что-то вроде этого:

$.ajax({
    type: 'POST',
    url: '.../some_cakePHP_controller_action',
    beforeSend: function(){
        $("my_loading_div").html("Checking permissions...");
    }
    success: function(){
        // do stuff on success
    }
});

1- Когда пользователь нажимает кнопку УДАЛИТЬ, я хочу показать ему загрузочный div с сообщением типа Checking permissions...

2- Если у пользователя есть права на удаление данных, сообщение изменится на Removing data...

Теперь, как вы можете видеть выше, проблема в том, что когда пользователь нажимает кнопку УДАЛИТЬ, у него появляется сообщение Checking permissions...., но мои данные могли быть удалены, потому что я уже внутри своей функции cakePHP. Таким образом, пользователь будет иметь неправильное сообщение. Как мне добиться этого поведения, пожалуйста?

Заранее спасибо за любую помощь

Ответы [ 4 ]

3 голосов
/ 17 марта 2012

Для этого вам нужно несколько вызовов ajax.Шаги будут примерно такими:

  1. вызов ajax для проверки прав доступа.
  2. При завершении php проверьте, есть ли у вас разрешение на удаление с помощью функции is_writable .
  3. Возвращает состояние предыдущего шага и показывает его как ответ ajax
  4. Согласнок состоянию шага 3. Отправьте запрос на удаление в php по ajax
  5. . Вызовите unlink на конце php.Затем проверьте еще раз, существует ли файл с помощью file_exists
  6. Возвращение статуса предыдущего шага и отображение сообщения пользователю соответственно
1 голос
/ 21 мая 2012

Лично я бы проверил разрешения, прежде чем дать им возможность что-то удалить. Скорее всего, я бы просто сделал это, когда страница отображается. Что-то вроде:

<?php if (hasPermission) { ?> 
  html to show delete function 
<?php } else { ?> 
  html to login to delete
<?php } ?>
1 голос
/ 20 апреля 2012

Проверка безопасности небезопасна, если пользователю разрешено или нет через JS !!!JS можно изменить, прежде чем нажать «Удалить».Вы должны проверить это через PHP или оба.

1 голос
/ 17 марта 2012

Возможно, вы захотите сделать 2 ajax-звонка.Сначала проверьте разрешение и, если оно есть, удалите элемент.

$("statusDiv").html("Checking permissions").fadeIn(100,function(){

   $.post("checkpermission?item=23",function(data){

         if(data=="allowed")
         {
             $("#statusDiv").html("Deleting...");
             $.post("mycontroller/delete/23",function(result){
               if(result=="deleted")
               {
                  $("#statusDiv").html("Deleted Successfully");
               }
            });    
    });

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...