2017-05-04 13 views
0

このロジックの書き方については混乱します。 私が探しているのは、ビデオが再生されているときで、ビデオ視聴率が2%を超える場合は、AJAXリクエストを1回送信したいとします。しかし、実際に起こっていることは、それは私が=(より大きい)の代わりを>(等しい)を記述する場合、私は丸めておりませんので、それがトリガされていない2%から100%まで私の場合は一度だけAJAXコールを送信する

をトリガーし続けますです小数点以下の桁数はトリガーされません。どのようにこのシナリオでこのロジックを書くことができますか? AJAXリクエストは1回だけ送信する必要があります。

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に設定します。今、 'ajaxSent'変数が真でないことをチェックするajax呼び出しの上に1つの余分な条件を追加するだけです。 –

+1

ブール値のフラグを使用して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リクエストが発生します。 –

関連する問題