2015-11-04 3 views
0

Вот мой код:сделать Ajax запрос только один раз внутри функции ONTIME jwplayer

jwplayer("mySingleVideoWrapper").onTime(function (event) { 
     jQuery("#getCurrentPositionOfVideo").val(event.position); 
     var videoLength = jwplayer('mySingleVideoWrapper').getDuration(); 
     jQuery("#getWholeDuration").val(videoLength); 
     var totalSec = videoLength; 
     var finalNumber = (totalSec*30)/100; 
     if (event.position > finalNumber) { 
      jQuery("#watchedElapsedCount").val('1'); 
      var videoViewsCount = jQuery("#watchedElapsedCount").val(); 
      var currentPostId = jQuery("#currentPostId").val(); 
      var json = '{"videoViewsCount" : "'+ videoViewsCount +'", "currentPostId" : "'+ currentPostId +'"}'; 
      var getSiteBaseUrl = jQuery('#getSiteBaseUrl').val(); 
      var ajaxurl = getSiteBaseUrl+"/wp-admin/admin-ajax.php"; 
      jQuery.ajax({    
       url: ajaxurl,    
       type:"POST",     
       dataType: "json", 
       data:{ 
        action: "elapsedDurationPercentage",      
        data: json    
       }, 
       success:function(data){ 

       } 
     }); 
    }  
}); 

Я использую WordPress и JW Player 7 Версия JavaScript и для обнаружения просмотров видео (если пользователь просмотрит по крайней мере 30% video) Я вызываю ajax и в действии elapsedDurationPercentage Я добавляю настраиваемое поле с соответствующим значением и обновлением в следующий раз.

Теперь внутри функции onTime() мой запрос ajax вызывает много раз позицию события. Как я могу назвать ajax только один раз внутри этой функции?

+0

Я не совсем понимаю. Однако, как только пользователь достиг 30% видео. Сделайте функцию исполнением только один раз с помощью некоторой переменной флага. Мое предположение состояло бы в том, что функция будет выполняться несколько раз, как только после достижения 30%. – divakar

+0

Можете ли вы показать мне пример использования переменной флага? @divakar – aidadev

+0

Это может быть что угодно. просто объявите переменную типа var a = 0; – divakar

ответ

2
var flag = 0; 
    jwplayer("mySingleVideoWrapper").onTime(function (event) { 
     if(flag == 0){ 
      jQuery("#getCurrentPositionOfVideo").val(event.position); 
      var videoLength = jwplayer('mySingleVideoWrapper').getDuration(); 
      jQuery("#getWholeDuration").val(videoLength); 
      var totalSec = videoLength; 
      var finalNumber = (totalSec*30)/100; 
      if (event.position > finalNumber) { 
       jQuery("#watchedElapsedCount").val('1'); 
       var videoViewsCount = jQuery("#watchedElapsedCount").val(); 
       var currentPostId = jQuery("#currentPostId").val(); 
       var json = '{"videoViewsCount" : "'+ videoViewsCount +'", "currentPostId" : "'+ currentPostId +'"}'; 
       var getSiteBaseUrl = jQuery('#getSiteBaseUrl').val(); 
       var ajaxurl = getSiteBaseUrl+"/wp-admin/admin-ajax.php"; 
       if(jQuery("#watchedElapsedCount").val() == '1'){ 
        flag = 1; 
        var xhr = jQuery.ajax({    
         url: ajaxurl,    
         type:"POST",     
         dataType: "json", 
         data:{ 
          action: "elapsedDurationPercentage",      
          data: json    
         }, 
         success:function(data){ 
          flag = 1; 
          return flag; 
         } 
        }); 
       } 
      } 

    } 
}); 
+0

снова в этом случае мой ajax вызывает несколько раз @divakar – aidadev

+0

, пожалуйста, проверьте эту скрипту http://jsfiddle.net/4yb832q7/1, я немного изменил ваш код и изменил место, где вам присвоено значение 1, теперь только ajax-вызовы три раза, вы можете помочь мне понять, почему он звонит в 3 раза? @divakar – aidadev

+0

уверен. дай мне проверить. – divakar