2013-07-01 5 views
-1

У меня есть этот код, и я хочу сделать таблицу переменных глобальной переменной, но она не работает, и я не понимаю, почему, может кто-нибудь мне помочь?Объявление глобальной переменной в jQuery

 var table; 
     function formatCustomerResults(obj) { 
      var rows = Array(); 
      for (i = 0; i < obj.length; i++) { 
       var item = obj[i]; 
       rows.push({ 
        cell : [ item.guid, item.limittime, item.limitname ] 
       }); 
      } 

      console.log(rows); 
      table = rows; 

      return { 
       total : obj.length, 
       page : 1, 
       rows : rows 
      }; 
     } 

     $.ajax({ 
      type : 'GET', 
      url : 'http://localhost:6181/fintpWebServices/api/timelimits', 
      dataType : 'json', 
      success : function(data) { 
       obj = data.timelimits; 
       formatCustomerResults(obj); 
      } 
     }); 

     console.log(table); 
+1

Что это дает в консоли? Ошибка? пустой? или что-нибудь еще? –

+5

Проблема заключается в том, что ajax является асинхронным, поэтому таблица по-прежнему 'null' – Shaddow

+0

, когда вы вызываете этот' console.log (rows); 'это что-то печатает на консоли? – dreamweiver

ответ

2

Выполняется асинхронный вызов, вы действуете так, как будто это синхронно. Вы вызываете console.log() перед вызовом обратного вызова. Ajax 101 материал.

0

Ваш вопрос в том, что вы звоните

console.log(table); 

перед тем таблицы фактически заселенной ваш вызов AJAX и функции formatCustomerResults. Помните, что «A» AJAX означает «асинхронный».

-1

Я предполагаю, что код, который вы показываете, обернут большей функцией? Это объясняет, почему оно объявляется локально, а не глобально.

Чтобы убедиться, что переменная всегда объявляется во всем мире, просто определить его как свойство объекта окна, поэтому удалить строку

var table; 

И заменить

table = rows; 

с

window.table = rows; 

Кроме того, можно просто написать

table = rows; 

без объявления таблицы в качестве локальной переменной, но это хорошая практика, чтобы явно определить глобальные переменные как свойства объекта окна (что глобальные переменные), так что ясно, к что ваше определение глобальной переменной является преднамеренным.

+0

Это проблема aynax async, а не проблема глобальных переменных. Вы можете видеть это из того факта, что декларация и последующий вывод таблицы находятся в пределах одной области. – Archer

+0

@ Арчер - Да, я понял, что после того, как я опубликовал свой ответ. Заголовок вопроса вводит в заблуждение, и «он не работает, и я не понимаю, почему» не очень прояснил проблему. – AmericanUmlaut

0

Собственно таблица переменная установлена ​​перед вашими переменными обновления, потому что этот код является asynchronous после использования ajax

Если вы console после вызова formatCustomerResults то он будет показывать ваш table

 success : function(data) { 
      obj = data.timelimits; 
      formatCustomerResults(obj); 
      console.log(table);// this will print data 
     } 
Смежные вопросы