2016-06-08 4 views
0

Я создал функцию для получения IP-адреса пользователя. Затем я попытался предоставить отдельный AD пользователю. Поэтому я использую условие if и пытаюсь использовать значение функции (getIP) для выполнения условия if. Но я не успеваю. Основная проблема заключается в том, что я не мог использовать переменную ip вне функции. Кто-нибудь может мне помочь.Как использовать переменную вне функции?

<script type="application/javascript"> 
    function getIP(json) { 
    ip=json.ip; //Here I got the user IP Address 
    } 
    getIP(json); 
    var KivaHan="221.120.101.58" 
    var Office="221.120.99.186" 
    if(ip==KivaHan){ 
    document.write("Kiva Han IP Address: " + ip); 
    }else{ 
    document.write("Office IP Address: " + ip); 
    } 
</script> 
<script type="application/javascript" src="https://api.ipify.org?format=jsonp&callback=getIP"></script> 

ответ

0

Измените это следующим образом.

  function getIP(json) { 
      return json.ip; 
      } 
      var ip = getIP(json); 
0

Если getIP функция синхронное, возвращает IP-адрес от него:

function getIP() { 
    var ip; // Don't forget to declare this 

    // ...get the IP address into `ip` 
    return ip; 
} 

использование

var ip = getIP(); 
if (ip) { 
    // Your code uses `ip` here 
} else { 
    // Failed to get it, handle that here 
} 

Если getIP функция асинхронным, у вас есть два варианты:

ли он принять обратный вызов, и вызовите функцию обратного вызова с IP:

function getIP(callback) { 
    var ip; // Don't forget to declare this 

    // ...get the IP address into `ip`, maybe have it set to null on error 
    callback(ip); 
} 

использование:

getIP(function(ip) { 
    if (ip) { 
     // Your code uses `ip` here 
    } else { 
     // Failed to get it, handle that here 
    } 
}); 

Или использовать Promise (ES2015, но есть ЛИЭС, что polyfill его достаточно хорошо, на двигатели JavaScript, которые не делают это изначально):

function getIP(callback) { 
    var ip; // Don't forget to declare this 
    return new Promise(function(resolve, reject) { 
     // ...get the IP address into `ip` 
     if (/* we got the IP */) { 
      resolve(ip); 
     } else { 
      // it failed: 
      reject(); 
     } 
    }); 
} 

использование:

getIP() 
    .then(function(ip) { 
     // Your code uses `ip` here; perhaps ip == null means failure 
    }) 
    .catch(function() { 
     // Failed to get it, handle that here 
    }); 
0

Только место, где javascript создает новую область действия. Всякий раз, когда вы видите ключевое слово function, можно с уверенностью предположить, что будет создана новая область. Проблема, с которой вы столкнулись здесь, заключается в том, что вы определяете ip внутри функции и пытаетесь получить доступ к ней за пределами, которая логически невозможна. Однако вы можете создать глобальную переменную и получить доступ к ней в любой точке вашей программы. Но недостатком этого является то, что это загромождает ваше глобальное пространство имен, и если вам не повезло, вы можете столкнуться с проблемами, которые будут странными и трудными для отладки.

Вы можете использовать IIFE (выражение, вызываемое сразу же), которое является одним из наиболее используемых шаблонов проектирования в javascript.

(function(){ 

    var ip = ""; //Define ip variable here. 
    function getIP(json) { 
      ip=json.ip; //Here I got the user IP Address 
      } 
      getIP(json); 
      var KivaHan="221.120.101.58" 
      var Office="221.120.99.186" 
       if(ip==KivaHan){ 
        document.write("Kiva Han IP Address: " + ip); 

       } 

       else{ 

        document.write("Office IP Address: " + ip); 
       } 

})(); 

Надеюсь, что это поможет.

Счастливое обучение :)

0

Я попытался с большей частью решения, но не получить реальный выход, который я хочу. Возможно, есть проблема с функцией getIP (json) и сайтом, откуда я получаю функцию для получения IP-адреса пользователя. Я думаю, что значение этого не может выходить за пределы функции. Поэтому я использовал другой сайт, чтобы получить IP-адрес пользователя.

Теперь я предлагаю альтернативное решение по моему требованию. В этом разделе я хочу получить IP-адрес пользователя, который я получаю в этой функции. Но я не мог отследить это из функции, которую я не мог использовать больше времени на этой странице.

Поэтому я использую приведенное ниже решение, чтобы заполнить мое требование ..

<head> 
<script type="text/javascript" src="https://l2.io/ip.js?var=userip"> </script><!-- To get IP Address of the user --> 
<script type="text/javascript"><!-- Here variables are decleared.. --> 
    var userip; 
    var KivaHan="221.120.101.58" 
    var Office="221.120.99.186" 

</script> 
</head> 
<!-- Javascript for tracking and comparing the user IP--> 

<!-- Below code is for implementation--> 

<div class="main-bottom"> 
     <div class="ad"> 
     <script type="text/javascript"> 
      if (userip==KivaHan){ 

       document.write("Welcome"); 
      } 
      else 
      { 
       document.write("Coming Soon"); 
      } 
     </script> 
     </div> 
     <div class="ad"> 
     <script type="text/javascript"> 
      if (userip==KivaHan){ 

       document.write("Welcome");    

      } 
      else 
      { 
       document.write("Coming Soon"); 
      } 
     </script> 
     </div> 
     <div class="ad"> 
     <script type="text/javascript"> 
      if (userip==KivaHan){ 

       document.write("Welcome"); 

      } 
      else 
      { 
       document.write("Coming Soon"); 
      } 
     </script> 
     </div> 

    </div> 
Смежные вопросы