0

現在、MySQLテーブルが入力されているテーブルがあります。次に、これらのセルからデータを取得し、それらを使用してシミュレートされたリアルタイム更新を作成します。ただし、forループを使用している複数の行があるため、機能しています。 javascript関数で、これが他の関数を実行しない原因になっていると思います。私はそれを回避する方法を理解できません。

Javascriptコード:

var seconds = 5;
var divid = "status";
var url = "boo.php";
var timeout;

function refreshdiv(){

// The XMLHttpRequest object

var xmlHttp;
try{
xmlHttp=new XMLHttpRequest(); // Firefox, Opera 8.0+, Safari
}
catch (e){
try{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); // Internet Explorer
}
catch (e){
try{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e){
alert("Your browser does not support AJAX.");
return false;
}
}
}

// Timestamp for preventing IE caching the GET request

fetch_unix_timestamp = function()
{
return parseInt(new Date().getTime().toString().substring(0, 10))
}

var timestamp = fetch_unix_timestamp();
var nocacheurl = url+"?t="+timestamp;

// The code...

xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
document.getElementById(divid).innerHTML=xmlHttp.responseText;
setTimeout('refreshdiv()',seconds*1000);
}
}
xmlHttp.open("GET",nocacheurl,true);
xmlHttp.send(null);
}

// Start the refreshing process

var seconds;
window.onload = function startrefresh(){
setTimeout('refreshdiv()',seconds*1000);
}

function runningtime(int) {
if(int == 0) { //if there is data
console.log("int=0 so no data is present, int: " + int);

} else if(int == 1){
var isRunning = new Array();
isRunning[0] = " ";
for (var i=0; i < 3; i++) {
var bool = 'running' + i;
console.log("Running = " + bool);
running = document.getElementById(bool).innerHTML.substring(10,11);

console.log("running: " + running);

if(isRunning[i] == "1") {

var time = 'Time' + i;

a= document.getElementById(time).innerHTML;
console.log("a= " + a);

  hour=a.substring(0,2);
  min= a.substring(3,5);
  sec= a.substring(6,8);

  sec==sec++;

if (min<=9) { min="0"+min; }
if (sec<=9) { sec="0"+sec; }

time = (hour + ":" + min + ":" + sec + " ");

if (document.getElementById) { document.getElementById(time).innerHTML = time; }
else if (document.layers) {
 document.layers.theTime.document.write(time);
 document.layers.theTime.document.close(); }

} else {
//Do nothing
return;
}
}
timeout = setTimeout("runningtime(1)", 1000);
}
}

function experiencehour(exp) {
if(exp == 0) { //if there is dexphourtexphour
console.log("exp=0 so no data is present, exp: " + exp);

} else if(exp == 1){

var isRunning = new Array();
isRunning[0] = " ";
for (var i=0; i < 3; i++) {
var bool = 'running' + i;
console.log("Running = " + bool);
running = document.getElementById(bool).innerHTML.substring(10,11); //checks if bot running

console.log("running: " + running);

if(isRunning[i] == "1") {

var exph = 'Exph' + i;
var expg = 'Exp' + i;

exphour = document.getElementById(exph).innerHTML; //exphour
currexp = document.getElementById(exp).innerHTML; //current gained exp
exphour =parseInt(exphour);
currexp =parseInt(currexp);

console.log("currexp= " + currexp);
console.log("exphour= " + exphour);

expmin = exphour/60;
console.log("expmin= " + expmin);
expsec = Math.round(expmin/60);
console.log("expsec= " + expsec);

newtotalexp = currexp + expsec;
console.log("newtotalexp= " + newtotalexp);

if (document.getElementById) { document.getElementById(exp).innerHTML = newtotalexp; } //writing new exp
else if (document.lexphouryers) {
 document.lexphouryers.theTime.document.write(time);
 document.lexphouryers.theTime.document.close(); }

} else {
//Do nothing
return;
}
}
timeout = setTimeout("experiencehour(1)", 1000);
}
}

function variable1hour(var1) {
if(var1 == 0) { //if there is dvar1hourtvar1hour
console.log("var1=0 so no data is present, var1: " + var1);

} else if(var1 == 1){

var isRunning = new Array();
isRunning[0] = " ";
for (var i=0; i < 3; i++) {
var bool = 'running' + i;
console.log("Running = " + bool);
isRunning[i] = document.getElementById(bool).innerHTML.substring(10,11); //checks if bot running
console.log("isRunning = " + isRunning[i]);



if(isRunning[i] == "1") {

var varh = 'Varh' + i;
var varg = 'Var' + i;

console.log("Varh = " + varh);
console.log("Var = " + varg);

var1hour = document.getElementById(varh).innerHTML; //var1hour
currvar1 = document.getElementById(varg).innerHTML; //current gained var1
var1hour =parseInt(var1hour);
currvar1 =parseInt(currvar1);

console.log("currvar1= " + currvar1);
console.log("var1hour= " + var1hour);

var1min = var1hour/60;
console.log("var1min= " + var1min);
var1sec = Math.round(var1min/60);
console.log("var1sec= " + var1sec);

newtotalvar = currvar1 + var1sec;
console.log("newtotalvar= " + newtotalvar);

if (document.getElementById) { document.getElementById(varg).innerHTML = newtotalvar; } //writing new var1
else if (document.lvar1houryers) {
 document.lvar1houryers.theTime.document.write(time);
 document.lvar1houryers.theTime.document.close(); 
 }

} else {
//Do nothing
return;
}
}
 timeout = setTimeout("variable1hour(1)", 1000);
}
}

function stopScript() {
console.log("Stopping script");
clearTimeout(timeout);
}

function startScript(i) {
variable1hour(i);
experiencehour(i);
runningtime(i);
}

3つの機能すべてを同時に実行できるように、これを回避する方法についてのアイデア。

コンソールを確認しましたが、実行を停止するようなエラーは発生していません。

4

1 に答える 1

0

JS で同時に持つことはできません。しかし、JS で同時に少しシミュレートすることはできます。

アンダースコアのdeferメソッドを見てください。

http://underscorejs.org/#defer

次のように機能します。

  • ループ本体を取得し、関数でラップします
  • for ループを反復するたびに、defer を使用して関数を呼び出します。

それは基本的にそれです。そうすることで、他の関数が特定のプロセス (関数) を「中断」し、実行スレッドを「共有」できるようになります。

遅延なしの標準 JS 実装。延期のクローザーをシミュレートしようとしています。ここで重要なことは、呼び出しはキューに入れられた順序で実行されますが、いずれかが完了する前にすべてが「開始」されるということです。AJAX 非同期リクエストの場合、非同期レスポンスは、任意の 2 つのループ反復の間に自身を挿入できる必要があります。わずかな遅延を使用してデータ処理を設定することもできます

http://jsfiddle.net/t2z9A/

for(var i = 0; i != 5; ++i)
{
    (function(index)
     {
         document.getElementById('id' + index).innerHTML = 'started...';

         setTimeout(function()
         {
             // kill some time
             var str = '';
             for(var j = 0; j != 10000000; ++j)
                 str = str + ' ';

             document.getElementById('id' + index).innerHTML = 'Function: 1.  Index: ' + index + ' - ' + new Date().getTime();
         }, index);
     })(i);
}

for(var i = 5; i != 10; ++i)
{
    (function(index)
     {
         document.getElementById('id' + index).innerHTML = 'started...';

         setTimeout(function()
         {
             // kill some time
             var str = '';
             for(var j = 0; j != 1000000; ++j)
                 str = str + ' ';

             document.getElementById('id' + index).innerHTML = 'Function: 2.  Index: ' + index+ ' - ' + new Date().getTime();
         }, 1);
     })(i);
}
于 2012-11-09T03:50:28.780 に答える