2014-06-10 3 views
2
function addAndRemove() { 
    if (mapData.initialZoom && !cameraStatus.locked) { 
     cameraStatus.locked = true; 
     var ajaxRequest = null; 


     var abortMission = setTimeout(function() { 

      /* Here is where I need the event listener. 
      * If the function is called again then we need to 
      * cancel our existing ajax request */ 

      if (ajaxRequest) { 
       ajaxRequest.abort(); 
       updatePrompt({text: "Cancelled ajax"}); 
      } 

      cameraStatus.locked = false; 
     }, 1000); 
    } 
} 

Как я уже говорил в комментариях в коде, мне нужно, чтобы иметь возможность слушать, чтобы увидеть, если addAndRemove вызывается снова в то время как в исполнении. Я хочу только отменить существующий запрос Ajax, если новый запрос был запрошен. Как я могу это сделать?JavaScript «функции вызывается» слушатель событий

+0

Готовы ли вы использовать библиотеки, такие как [подчеркивание] (http://underscorejs.org)? – Scimonster

+0

@Scimonster Нет, извините – jskidd3

ответ

3

Для создания состояния в вашей функции вам необходимо использовать замыкание.

Вы можете реорганизовать свою функцию таким образом.

var addAndRemove = (function(){ 
    var ajaxRequest = null; // --> move ajaxRequest variable here 
    return function() { 
    if (mapData.initialZoom && !cameraStatus.locked) { 
     cameraStatus.locked = true; 

     var abortMission = setTimeout(function() { 

      /* Here is where I need the event listener. 
      * If the function is called again then we need to 
      * cancel our existing ajax request */ 

      if (ajaxRequest) { 
       ajaxRequest.abort(); 
       updatePrompt({text: "Cancelled ajax"}); 
      } 

      cameraStatus.locked = false; 
     }, 1000); 
    } 
    } 
}()); 

Таким образом, ajaxRequest укажет на ту же ссылку независимо от того, сколько времени вы вызываете.

+0

Итак, если запрос Ajax - это то же самое, это означает, что он отменит себя и повторно использует его, правильно? Я думаю, что вы ответили, что мне нужно сделать. Я просто не уверен, что полностью понимаю его. – jskidd3

+0

Хм, это означает, что вы сможете отменить ajaxRequest с помощью метода прерывания, тогда вы можете переназначить ajaxRequest тем, что вы хотите предоставить вы не используете undefined или var, чтобы сделать это во внутренней функции. Вопрос в том, как вы собираетесь слушать результат ajax? вы можете передать функцию addAndRemove в качестве аргумента для этого (это будет обратный вызов). – mpm

+0

В моем полном коде у меня есть '.done' и т. Д., И он уже обрабатывается. Я дам это и экспериментирую, спасибо :) – jskidd3

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