2015-01-03 6 views
1

Что я пытаюсь сделать: Когда нажата кнопка выше, пользователь перенаправляется на один из трех сайтов в зависимости от своего местоположения. Однако приведенный ниже сценарий выполняется немедленно и перенаправляет пользователя, как только загружается страница, и NOT, когда кнопка нажата (по желанию). Что я делаю не так? Помогите мне исправить это, пожалуйста.Функция Javascript выполняется ... без вызова?

<script> 
function determineCountry(data){ 
    switch(data.address.country_code){ 
     case "US" : 
     window.location.href = "https://www.usa.com"; 
     break; 
     case "GB" : 
     window.location.href = "https://www.gb.com"; 
     break; 
     default : 
     window.location.href = "http://www.google.com"; 
    }  
} 
</script> 

<script type="text/javascript" src="http://api.wipmania.com/jsonp?callback=determineCountry></script> 
+2

'обратного вызова = defineCountry' в скрипте wipmania.com вы включаете вызовы функции ... – deceze

+0

В случае с «US» вы получили закрытый текст строки; это не должно быть причиной этого, но оно не может быть здоровым. –

+0

@NathanTuggy Это, очевидно, просто ошибка копирования, или его функция не будет работать вообще. – Barmar

ответ

0

Ваша последняя строка загружает сайт JSONP. JSONP работает, когда сервер отправляет Javascript, который вызывает функцию. Когда вы указываете callback=determineCountry, это говорит ему, чтобы вызвать вызов этой функции в Javascript. Таким образом, сценарий в конце содержит вызов верхнего уровня, как:

determineCountry({ some JSON object }); 

При загрузке сценария, он запускает функцию немедленно.

Обычно JSONP используется в вызовах AJAX, а не непосредственно в тегах <script>. Таким образом, вы, вероятно, просто хочу, чтобы удалить строку

<script type="text/javascript" src="http://api.wipmania.com/jsonp?callback=determineCountry></script> 

На самом деле, что это выглядит как вам действительно нужно сделать, это выполнить вызов JSONP AJAX, когда пользователь нажимает на якорь:

<a onclick="ajaxDetermineCountry();" href="#" class="installbtn">Install</a> 

<script> 
function ajaxDetermineCountry() { 
    var script = document.createElement('script'); 
    script.src = "http://api.wipmania.com/jsonp?callback=determineCountry"; 
    document.head.appendChild(script); 
} 
function determineCountry(data){ 
    switch(data.address.country_code){ 
     case "US" : 
     window.location.href = "https://www.usa.com"; 
     break; 
     case "GB" : 
     window.location.href = "https://www.gb.com"; 
     break; 
     default : 
     window.location.href = "http://www.google.com"; 
    }  
} 
</script> 
+0

Не удалял ли строку весь код? – Adept

+0

Я думаю, что вам действительно нужно сделать, чтобы 'definCountry' выполнял вызов AJAX. – Barmar

+0

Ух .. и как бы я это сделал? – Adept

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