2015-03-07 2 views
0

Я пытаюсь установить глобальную переменную countryCode. Но значение всегда равно нулю. Что я могу сделать? Я пробовал много способов. PLS HELP!Глобальная переменная - AJAX jQuery

function GetGeolocation(){ 

    $.getJSON("http://ip-api.com/json/?callback=?",function(data){ 
    $.each(data, function(k, v) { 
    table_body += "<tr><td>" + k + ": " + "</td><td><b>" + v + "</b></td></tr>"; 

     if (k == "countryCode") 
     { 
      SetGeolocation(v); 
     } 
    })    
    }); 
} 

function SetGeolocation(value){ 

    countryCode = value; 
    console.log(countryCode); //Value 
} 

function Result(){ 
    console.log(countyCode); //Null 
} 

$(document).ready(function(){ 
    GetGeolocation(); 
    Result(); 
}); 
+0

Не похоже, что вы сделали «countryCode» глобальной переменной. Вы можете попробовать заменить 'countryCode' на' window.countryCode' всякий раз, когда он используется, чтобы сделать его глобальной переменной. – user1063998

+1

Попробуйте добавить 'var countryCode;' над первой функцией, чтобы установить ее как глобальную. – sideroxylon

+1

@ user1063998 countryCode - глобальная переменная. Если вы не объявляете переменную с var в js - она ​​глобальна. Тот факт, что это значение, является Null, но не неопределенным, доказывает это. –

ответ

1

В JavaScript переменная, которая была объявлена ​​без var ключевого слова внутри функции становится глобальным только после вызова функции.

Рассмотрим это:

function foo(){ 
    bar = 123; 
} 

// Reference error - bar is undefined 
console.log(bar); 

Теперь перед тестированием bar переменной, назовем функцию foo.

function foo(){ 
    bar = 123; 
} 

foo(); 

// 123 
console.log(bar); 

У вас его есть? Правильно? Хорошо. Что касается вашего кода, ошибка довольно очевидна countryCode - undefined только потому, что вы не звонили SetGeolocation() раньше. Чтобы заставить его работать так, как вы ожидаете, вам нужно как-то позвонить SetGeolocation(), прежде чем позвонить Result().

Но не делайте это всерьез. Глобальные переменные хорошо известны, что не делать. Рассмотрим вместо этого переменную как зависимость.

+0

Я попытался вызвать функцию 'Result()' в 'SetGeolocation()', и она сработала! спасибо!! – JohnWalker891212

Смежные вопросы