使用JavaScript中的异步Web方法返回值触发/阻止页面事件

Trigger/Prevent page event by using asynchronous webmethod return value in JavaScript

本文关键字:事件 返回值 JavaScript 异步 方法 Web 使用      更新时间:2023-09-26

我使用Web方法来确定用户是否可以"删除记录"。

以下是添加此访问控制之前的JavaScript代码。

$(".apply-delete-msg").live('click', function() {
   return confirm("Are you sure you want to delete this item(s)?);    
});

现在它将调用webMethod来验证访问

<WebMethod(EnableSession:=True)> _
Public Function CanAccess() As Boolean
    Return ServerCode.IsAccessable
End Function

新的JavaScript:

$(".delete-msg").live('click', function() {    
    MPWebService.CanAccess(
        //B
        function(boolRes) {    
          if (boolRes == true){
                 return  confirm("Are you sure you want to delete this item(s)?");}             
          else{
                 alter("can't access");
                 return false;
          }           
    });
    // **Here is Comment A**: Return true/false
});

如果用户可以访问并确认删除/无法访问或取消删除,我希望".Live"方法返回true/false。

但如果我是对的,该方法将首先调用CanAccess,然后调用Comment A:,最后调用(即函数(boolRes))。

因为boolRes的值在函数(boolRess)内部,并且它最终被处理,所以我很难在Comment a位置从该方法获得返回值。

有什么建议吗?

Web服务调用是异步的,在您从单击消息返回后将返回一个结果。因此,您总是需要从单击方法返回false并重新设计页面,以便在web服务方法返回后执行通常在客户端单击后发生的操作(返回true)。在等待通话完成时,如果能收到一条"请稍候…"的信息,那也很好。

有两种方法:

  • 在boolRes==true块中执行注释A代码
  • 创建一个包含注释a代码的回调,并在boolRes==true块中调用此回调