2016-04-28 2 views
-1

Я получаю данные от источника AJAX, а затем присваиваю его глобальной переменной, которая, похоже, не работает. Может кто-нибудь, пожалуйста, назовите меня в правильном направлении?Ошибка присвоения данных Ajax глобальной переменной

var products = []; 
    var count = 0; 
    $.ajax(
    { 
     url: 'url', 
     success: function(response) 
     { 
      prCallback(response); 

     }, 
     dataType: 'jsonp' 
    }); 
    function prCallback(response) 
    { 
     window.products = response;    
    } 
    console.log(products); 

products еще пустой array, несмотря на присвоение значения.

+2

Выполняется вызов журнала консоли перед выполнением вызова AJAX. – j08691

+1

JS is ** not ** .. – Tushar

+0

Переместить 'console.log' внутри обратного вызова; – Tushar

ответ

4

Вы регистрируетесь до того, как ответ вернется. Переместите консоль.log внутри обратного вызова.

Запрос ajax является асинхронным, это значит, что он еще не вернулся, когда вы вызываете console.log.

+1

http://stackoverflow.com/questions/16336367/what-is-the-difference-between-synchronous-and-asynchronous-programming-in-node –

+2

Спасибо всем за открытие моих глаз, я предположил, что успех означает, что выполнение завершено , –

-2

Назначение значений глобальным переменным не является хорошей идеей.

Однако здесь, в console.log, у вас есть переменные продукты, которые вы указали в верхней части. В обратном вызове вы присвоили значение переменной окна «products», а не переменной, объявленной сверху.

Вы можете удалить объявление - "var products = []", и вы должны увидеть результаты в console.log. Однако это плохая идея сохранить их таким образом.

+0

'window.variableName' не отличается от вызова самого имени переменной, если это глобальная переменная. Он просто используется, чтобы сделать очевидным, что это глобальная переменная. Хотя глобальные переменные могут быть плохой идеей в большинстве случаев, ваш ответ вводит в заблуждение по этому вопросу. – Tricky12

+0

Да, но в приведенном выше примере мы имеем объявление «var products = []», и теперь продукты не являются переменной окна, а глобальными для всей этой области. – Griffi

+0

Проблема OP, безусловно, вызвана асинхронным поведением. Этот ответ верен (но опять же, недостаточно, поскольку он не затрагивает известную асинхронную проблему), если код OP находится в неглобальной области. – apsillers