2016-11-07 4 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 создается истина, однако это не меняет его, когда я предупрежу его после. Как передать это обратно?

Спасибо!

До сих пор я это сейчас:

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

Суть в том, что вам нужно вызвать функцию внутри обработчика успеха, который использует данные, или использовать Promises. Я настоятельно рекомендую прочитать первые несколько ответов. Вы узнаете много нового о том, как работает асинхронный код. – 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 в другой функции. Я не могу загрузить эту функцию в успех. –