2017-05-04 44 views
0

我很困惑如何编写这个逻辑。 我在寻找什么时候播放视频,如果视频观看百分比超过2%我想发送一次AJAX请求。但什么是实际发生的情况是,将继续从2%触发至100%如何在我的情况下只发送一次AJAX呼叫

如果我写=(等于)代替>(大于)它不触发,因为我不是四舍五入小数点后的数字不会触发。那么我如何在这种情况下编写这个逻辑呢? AJAX请求应该只发送一次。

var j = 0; 
$("#video").bind("timeupdate", function() { 
    var currentTime = this.currentTime; 
    var totalPlayed = 0; 
    var played = video.played; 
    for (var i = 0; i < played.length; i++) { 
    totalPlayed += played.end(i) - played.start(i); 
    var playedInPercentage = (totalPlayed/totalTime)*100; 
    } 
/*here i want to write a logic to send this lowered only once.*/ 
    if (totalPlayed > 0.02*(totalTime)) { //watched 2% and above then this will excute 0.02(2%) 
    alert("asdsad"); 
    if(j < 1) { 
     /* Ajax call video watched starts here it should trigger only once*/ 
     $.ajax({ 
      url: "student_learning_controller.php", 
      method: "POST", 
      data: {'action': 'videoWatched', 'course_id': course_id,'videoId' : videoId,'totalVideoTime':totalTime,'totalPlayedTime':totalPlayed,'percentagePlayed':playedInPercentage }, 
      dataType: "json", 

      success: function (response) { 
       if (response["success"] == true) { 
        $("#success_message").html(response["message"]);  

       } 
      }, 
      error: function (request, status, error) { 
       $("#warning_message").show(); 
       $("#warning_message").html("OOPS! Something Went Wrong Please Try After Sometime!"); 
      } 
     }); 
     /* Ajax call video watched ends here */ 
    } 
    j += 1; //Reset for duplicates (repeated playback) 
} 
});  
+2

保持一个全局变量,例如'var ajaxSent = false;',并在进行ajax调用时将其设置为true。现在,只需在ajax调用之上添加一个额外的条件来检查“ajaxSent”变量是否为真。 –

+1

只需使用一个布尔标志并将其值设置为第一次调用并使用一个条件来检查它是否发送另一个调用 –

+0

@MohitBhardwaj您可以写答案我没有得到它。 –

回答

3

您可以在“if”之前使用var triggered = 0;

,然后在“如果”变成:if(totalPlayed > 0.02*(totalTime) && !triggered){triggered = 1;

这是因为当你输入“如果”,你会更新“触发”变量,它不会“如果”再次进入将只执行一次。

+0

它不工作...仍然ajax电话继续触发。 –

+0

将触发变量放在任何循环之外,应该可以工作 – vldfr

0

使用变量。当你输入一个Ajax时,你改变这个变量。在IF中使用该变量。

JS:

var var_tr = $(#hideninput).val(); 
if(totalPlayed > 0.02*(totalTime) && Var_tr == "false") { 
     ... 
     $(#hideninput).val("True"); 
     /* Ajax call video watched starts here it should trigger only once*/ 
     $.ajax({ 
      url: "student_learning_controller.php", 
      method: "POST", 
      data: {'action': 'videoWatched', 'course_id': course_id,'videoId' : videoId,'totalVideoTime':totalTime,'totalPlayedTime':totalPlayed,'percentagePlayed':playedInPercentage }, 
      dataType: "json", 

      success: function (response) { 
       if (response["success"] == true) { 
        $("#success_message").html(response["message"]);  

       } 
      }, 
     error: function (request, status, error) { 
      $("#warning_message").show(); 
      $("#warning_message").html("OOPS! Something Went Wrong Please Try After Sometime!"); 
      $(#hideninput).val("false"); 
     } 
    }); 
    /* Ajax call video watched ends here */ 
} 

HTML创建:

<input id = "hideninput" type = "hidden" value = "false"> 
+0

您应该在ajax调用开始时更新变量。如果你把它放在成功的响应中,那么在第一个Ajax请求响应的时候,几个其他的Ajax请求就会被触发。 –

相关问题