显示jquery ajax执行状态

时间:2012-03-16 19:52:47

标签: php cakephp jquery

假设我正在对某些cakePHP控制器操作进行ajax调用,以从数据库中删除一些数据。但在我删除数据之前(当然在我的cakePHP控制器操作中发生),我想检查请求删除数据的用户是否有权这样做。我要做的是向用户显示执行步骤,例如我有这样的事情:

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

1-当用户点击DELETE时,我想向他显示加载div,其中包含Checking permissions...

等消息

2-如果用户有权删除数据,则Removing data...

的消息会更改

现在,正如您在上面看到的,问题是当用户单击DELETE时,他将收到消息Checking permissions....,但我的数据可能已被删除,因为我已经在我的cakePHP函数中。因此,用户将收到错误的消息。我该如何实现这种行为?

提前感谢您提供任何帮助

4 个答案:

答案 0 :(得分:3)

你需要多次ajax调用。步骤将是这样的,

  1. ajax调用检查权限。
  2. 在php结束时检查您是否具有is_writable功能的删除权限。
  3. 返回上一步的状态并将其显示为ajax响应
  4. 根据步骤3的状态。通过ajax发送删除请求
  5. 在php端调用unlink。然后再按file_exists
  6. 检查文件是否存在
  7. 返回上一步的状态并相应地向用户显示消息

答案 1 :(得分:1)

您可能想要进行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");
               }
            });    
    });

});

答案 2 :(得分:1)

通过JS验证用户是否被允许是不安全的! 在点击“删除”之前可以修改JS。 您应该通过PHP或两者验证它。

答案 3 :(得分:1)

就个人而言,我会在给他们删除内容之前检查权限。我很可能会在呈现页面时执行此操作。类似的东西:

<?php if (hasPermission) { ?> 
  html to show delete function 
<?php } else { ?> 
  html to login to delete
<?php } ?>