2016-11-07 50 views
0

我試圖找出爲什麼這不起作用。我以爲我的理解範圍......將變量傳遞給函數並返回

var admin_data = false; 
function getPlayerAdmin(){ 
    var formData = { 
     'player_id' : $('#post-v').attr('data-val') 
    }; 
    $.ajax({ 
     type: 'post', 
     url: '/popins/player/controls', 
     data : formData, 
     dataType : 'json', 
     success: function(admin_data) { 
      if(admin_data.controls.is_admin == true){ 
       admin_data = true; 
      }else{ 
       admin_data = false; 
      } 
     } 
    }); 
} 
alert(admin_data); 

所以基本上admin_data被設置爲true,但它不會改變它時,我提醒後它。我怎麼把這個傳回去?

謝謝!

到目前爲止,我現在有這樣的:

var admin_data = false; 

adminData(function(admin_data) { 
    if(admin_data_vals.controls.is_admin == true){ 
     admin_data = true; 
    }else{ 
     admin_data = false; 
    } 
}); 

function getPlayerAdmin(adminData){ 
    var formData = { 
     'player_id' : $('#post-v').attr('data-val') 
    }; 
    $.ajax({ 
     type: 'post', 
     url: '/popins/player/controls', 
     data : formData, 
     dataType : 'json', 
     success: adminData 
     }, 
     error : function(jqXHR, textStatus, errorThrown){ 
      console.log(jqXHR); 
     } 
    }); 
} 
alert(admin_data); 

第三嘗試:

var admin_data = false; 
function getPlayerAdmin(admin_data){ 
    var formData = { 
     'player_id' : $('#post-v').attr('data-val') 
    }; 
    $.ajax({ 
     type: 'post', 
     url: '/popins/player/controls', 
     data : formData, 
     dataType : 'json', 
     success: function(admin_data_vals, admin_data) { 
      if(admin_data_vals.controls.is_admin == true){ 
       admin_data = true; 
      }else{ 
       admin_data = false; 
      } 
     }, 
     error : function(jqXHR, textStatus, errorThrown){ 
      console.log(jqXHR); 
     } 
    }); 
} 
getPlayerAdmin(); 
alert(admin_data); 
+3

可能重複[如何從異步調用返回響應?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - 異步調用) – 4castle

+0

不理解那篇文章,太多了。 –

+1

的要點是你需要從使用數據的成功處理函數中調用函數,或使用Promise。儘管如此,我強烈建議閱讀前幾個答案。您將學到很多關於異步代碼如何工作的知識。 – 4castle

回答

1

在這裏你可以做很多事情來的東西像承諾,延期對象等解決這個問題,但你只需在成功/錯誤回調中執行您的邏輯即可,如果您需要對響應進行復雜的處理並不複雜。

success: function(adminData) { // Should probably change the parameter name 
           // to not be the same as the variable you are setting 
    if (adminData.controls.is_admin == true) { 
    admin_data = true; 
    alert(admin_data); 
    } else { 
    admin_data = false; 
    alert(admin_data); 
    } 
} 
+0

這不會返回要在另一個函數中使用的變量。 –

+0

確實如此,用您的功能替換警報 – JB06

+0

您錯過了這一點。我試圖讓另一個函數中的admin_data變量。成功時我無法加載該功能。 –