2017-06-06 45 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()