2017-06-06 44 views
0
$(function() { 
     //hard coded for initial debugging usage, must add table to reference 
     var userPermissionLevelRequired = 31; 
     var currentUserDescription = $('.user-menu .hidden-xs').html(); //to get user description 
     var userList = null; 
     var table = null; 
     var userName = $.grep(userDetail, function (item) { 
      return item.Description === currentUserDescription; 
     }); 

     getUserMembers(); 

     /*$.ajax({ 

      'url': '/Home/GetUserMembers', 
      'type': 'GET', 
      dataType: "json", 
      'success': function (data) { 
       userList = data; 
       populateDropDown(data); 
       debugger; 
      }, 
      'error': function (request, error) { 
       alert("Request: " + JSON.stringify(request)); 
      } 
     });*/ 

     function setPermission() { 
      //do something... 
     } 
     function getUserMembers() { 
      $.ajax({ 

       'url': '/Home/GetUserMembers', 
       'type': 'GET', 
       'dataType': 'json', 
       'async':'false', 
       'success': function (data) { 
        userList = data; 
        populateDropDown(data); 
        debugger; 
        //alert("data.length " + data.length); 
        setPermission(); 
       }, 
       'error': function (request, error) { 
        alert("Request: " + JSON.stringify(request)); 
       } 
      }); 
     } 

我想在ajax调用之后添加更多的代码,它被注释掉了。但是代码会在从ajax调用返回之前运行得更远。在ajax调用之后,我可以让setPermission运行的唯一方法是将调用放入ajax成功函数中。为什么我必须这样做?jQuery奇怪的提升/初始化行为

+2

因为'javascript'是'异步的' –

+0

@Bhavik Patel - 真的很简单。有没有其他办法来处理这种情况。请提出答案,以便我可以接受 –

回答

1

实际上,$ .ajax函数默认是异步的,而不是javascript本身。使用异步属性,实际上可以将行为更改为同步。

然而,就不得不提到的false不带引号,如下图所示:

$.ajax({ 

    'url': '/Home/GetUserMembers', 
    'type': 'GET', 
    'dataType': 'json', 
    'async': false, 
    'success': function (data) { 
     userList = data; 
     populateDropDown(data); 
     debugger; 
     //alert("data.length " + data.length); 
     setPermission(); 
    }, 
    'error': function (request, error) { 
     alert("Request: " + JSON.stringify(request)); 
    } 
}); 
在这种情况下

,在$就会表现为同步调用,你可以有以下说的任何陈述您不需要在成功块内部拨打setPersmission()