2013-09-12 2 views
0

Я не уверен, почему моя функция работает только один раз. В основном в моем JSON, GhStatus и CsStatus оба значения имеют значение 0, поэтому я ожидаю, что предупреждение отключится дважды, сказав «сбой».Функция успешно запускается один раз, а затем прерывается непрерывно

Однако этот набор предупреждений появляется только один раз. Затем в соответствии с инструментами разработчика Chrome, я получаю ошибки каждые 2 секунды говоря:

Uncaught SyntaxError: Unexpected identifier 

Однако выход не указывает, где в коде это происходит = [

$(document).ready(GrabGhCsStatus()); 

    function GrabGhCsStatus() { 
    var url = '@Html.Raw(Url.Action("index","GhCs"))'; 
    window.setInterval(
     $.get(url,function(data) { 
      if (data.GhStatus == 0) {             
       $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });    
       alert('crash'); 
      } 
      else { 
       $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });   
       alert('running'); 
      } 
      if (data.CsStatus == 0) {             
       $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });  
       alert('crash'); 
      } 
      else { 
       $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });  
       alert('running'); 
      } 
     }, "json"), 2000);             

    } 

ли способ, которым я отформатировал этот код или где я помещал функцию, влияющую на выход?

+1

В дополнение к нижеследующим ответам было бы безопаснее использовать setTimeout, а не setInterval. –

+0

Я прочитал документацию для setTimeout, и я думаю, что она говорит, что эта функция создает дополнительную задержку. Я пытаюсь повторно запустить код каждые 2 секунды, чтобы сравнить, не забудьте ли мои данные JSON не изменяться. – Liondancer

+1

Правильно, но если вы сделаете это с помощью setInterval, и запрос займет больше 2 секунд (что не редкость, сеть проблемы происходят все время), это может привести к сбою браузера с течением времени. использование setTimeout может выполнить ту же цель без этой возможности, потому что она не отправит следующий запрос до тех пор, пока предыдущий не завершится. –

ответ

4

Синтаксические ошибки, добавить некоторые функции и закрыть их должным образом:

$(document).ready(function() { // needs anonymous function 
    GrabGhCsStatus(); 
}); 

function GrabGhCsStatus() { 
    var url = '@Html.Raw(Url.Action("index","GhCs"))'; 
    $.get(url, function (data) { 
     if (data.GhStatus === 0 || data.CsStatus === 0) { 
      $('#GhCsStatus_CS').buttonMarkup({ 
       icon: 'myapp-cs' 
      }); 
     }else{ 
      $('#GhCsStatus_GH').buttonMarkup({ 
       icon: 'myapp-gh' 
      }); 
     } 
     setTimeout(GrabGhCsStatus, 2000); 
    }, "json"); 
} 
+1

Или просто '$ (document) .ready (GrabGhCsStatus);' – johusman

+1

@johusman - действительно, ссылка на функцию работает, но в этом случае OP не понял основ анонимных функций и должен использовать стандартный готовый обработчик. – adeneo

+0

Это, кажется, полный ответ, +1 – mdenton8

2

Первым аргументом setInterval должна быть функция.

window.setInterval(function() { 

    $.get(url,function(data) { 
     if (data.GhStatus == 0) {             
      $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });    
      alert('crash'); 
     } 
     else { 
      $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });   
      alert('running'); 
     } 
     if (data.CsStatus == 0) {             
      $('#GhCsStatus_CS').buttonMarkup({ icon: 'myapp-cs' });  
      alert('crash'); 
     } 
     else { 
      $('#GhCsStatus_GH').buttonMarkup({ icon: 'myapp-gh' });  
      alert('running'); 
     } 
    }, "json") }, 2000); 
1

да, вы хотите вложить вызов $ .get в функцию и передать эту функцию setInterval:

window.setInterval(function() { 
    $.get.... 
}, 2000); 

setInterval ожидает функцию как первый параметр. В вашем случае возвращаемое значение $ .get() передается в setInterval. И это, вероятно, не определено.

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