From 0138f6b08b7a7f364caf1f7ec6a9a26cf2684dfb Mon Sep 17 00:00:00 2001 From: judge Date: Thu, 20 Jun 2013 23:45:58 +0800 Subject: [PATCH] Prevent race condition with player clicking before AJAX query finishes --- web/qwebchess/js.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/web/qwebchess/js.js b/web/qwebchess/js.js index db91e14..53e9288 100644 --- a/web/qwebchess/js.js +++ b/web/qwebchess/js.js @@ -87,7 +87,10 @@ $(document).ready(function() } if (legal) + { + canClick = false; $.ajax({url : "/cgi-bin/qchess.cgi", data : {x : id[0], y : id[1]}}).done(function(data) {$(this).update(data)}); + } }); $.fn.showMoves = function() @@ -213,7 +216,7 @@ $(document).ready(function() $(this).html(emptyHTML); // Collapse into quantum state if on a black square - if ((dest.getX() + dest.getY()) % 2 != 0 && (dest.html()[0] == '?' || dest.html()[dest.html().length-1] == '?')) + if ((dest.getX() + dest.getY()) % 2 != 0 && (dest.html()[0] == '?' || dest.html()[dest.html().length-1] != dest.html()[0])) { oldHTML = dest.html(); dest.html(oldHTML.replace(/.*<\/bold>/i, "?")); @@ -225,6 +228,7 @@ $(document).ready(function() { console.log("AJAX Response:\n"+data); var lines = data.split("\n"); + var timeout = false; for (var i = 0; i < lines.length; ++i) { var tokens = lines[i].split(" "); @@ -237,7 +241,7 @@ $(document).ready(function() if (s1.html()[4] != '0') { s2 = $("#board").find("#"+tokens[3]+tokens[4]); - canClick = false; + timeout = true; setTimeout((function(x) { return function() @@ -296,6 +300,8 @@ $(document).ready(function() break; } } + if (timeout == false) + canClick = true; } //Reset the colour of a square -- 2.20.1