Autor Zpráva
warestarted
Profil
Zdravim mam taky problem a neviem ho vyriesit.Poprosil by som ochotnych kolegov o pomoc, dakujem...


while (iY>0)
{
console.log(iY)
sipka_y = ID[0].Y-iY;
var x_poz_pole = ID[0].X*70;
var y_poz_pole = sipka_y*70; 

databaza.query('select X,Y from polia where ID="1" AND X="8" AND Y="1";', function (err, vypis) { 
return "ds";
console.log(iY)//vypise undefined 1.chyba
});     

console.log(vypis[0].X)//vypise undefined  2.chyba


iY--;
}  


a teraz co potrebujem...bud kde mam 1.chyba vlozit to iY a ine premenne alebo (co je pre mna lepsie) vytiahnut ten vypis von z tej funkcie

window.vypis nereaguje a ani nebude lebo to robim v node.js takze tam si to nevytiahnem ako globalnu premennu a ako vidite tak to je objekt... potrebujem to koli tomu aby sa overovalo ci sa tam nieco nenachadza..vytiahne z databazy udaje overi a ak nie tak nieco zapise..a nad while to nemozem dat lebo tie premenne co tam mam teraz X = 8 atd tie su neni stale ...

Poprosil by som napady navrhy...

Erik Kadar
_es
Profil
warestarted:
Nie je ti dostatočne rozumieť, čo ten tvoj kód má robiť, nedostatočné iné informácie ako napríklad čo robí funkcia databaza.query a pod.

vypise undefined 1.chyba
To ťažko, keďže je funkcia o riadok vyššie ukončená príkazom return.
warestarted
Profil
var mysql      = require('mysql');
var databaza = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  password : '****',
  database : 'test'
});



function handleDisconnect(databaza) {
  databaza.on('error', function(err) {
    if (!err.fatal) {
      return;
    }

    if (err.code !== 'PROTOCOL_CONNECTION_LOST') {
      throw err;
    }

    console.log('Re-connecting lost connection: ' + err.stack);

    databaza = mysql.createConnection(databaza.config);
    handleDisconnect(databaza);
    databaza.connect();
  });
}


var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);

server.listen(8000);

app.use("/", express.static(__dirname + '/public'));
//vytvorenie pripojenia 
io.sockets.on('connection', function (socket) {
//databaza
databaza.connect(function(err) {
databaza.query('select X,Y,OBR,TYP,ID from polia;', function(err, rows) {
i=0;
while(rows[i])
{
socket.emit('vypis', { X: rows[i].X , Y: rows[i].Y , OBR : rows[i].OBR , TYP: rows[i].TYP ,ID: rows[i].ID});
i++;
 }
});
socket.on('ID', function (data) {
databaza.query('select X,Y,TYP,ID from polia where ID="2";', function(err, ID) {
 //cita polia
  var pole_x = data.X/70;
  var pole_y = data.Y/70;
  pole_x = Math.ceil(pole_x);
  pole_y = Math.ceil(pole_y);  
  //---------koniec citania

  var x_hrac = (ID[0].X*70)+data.rozX;
  var y_hrac = (ID[0].Y*70)+data.rozY; 
    console.log(x_hrac+" "+y_hrac)

  var vypoc_dlzka_x = x_hrac-data.X;
  var vypoc_dlzka_y = y_hrac-data.Y;
  
  var vypoc_poli_y = vypoc_dlzka_y/70;
      vypoc_poli_y = Math.ceil(vypoc_poli_y);

  var vypoc_poli_x = vypoc_dlzka_x/70;
      vypoc_poli_x = Math.ceil(vypoc_poli_x);
      vypoc_poli_x = vypoc_poli_x-5; 
 
 
 var iY = vypoc_poli_y;
  var iX = vypoc_poli_x;
  var iXpos = iX;
  var iYpos = iY;
     
  var cesta1 = "";
  var cesta2 = ""; 
  var x_poz_pole;
  var y_poz_pole;
while (iY>0)
{
console.log(iY)
sipka_y = ID[0].Y-iY;
var x_poz_pole = ID[0].X*70;
var y_poz_pole = sipka_y*70; 
                                                                                                                                                                                                                                  //toto potrebujem dat von
                                                                                                                                                                                                                                    //ˇ 
databaza.query('select X,Y from polia where ID="1" AND X="8" AND Y="1";', function aha(err, vypis) { 

console.log(iY)//vypise undefined 1.chyba
});     
//sem von dat 
console.log(vypis[0].X)//vypise undefined  2.chyba

console.log()
if (typeof(vypis[0]) == "undefined")
{

if (iY==iYpos)
{
cesta1 = sipka_y+"_"+ID[0].X+"_vlajka;"+cesta1;
}
else
{
cesta1 = sipka_y+"_"+ID[0].X+"_hore;"+cesta1;
}
console.log("spustil1 "+cesta1)
}
else
{
sipka_y2=sipka_y+1;
if (iY==iYpos)
{
cesta1 = sipka_y2+"_"+ID[0].X+"_vlajka;"+cesta1;
}
else
{
cesta1 = sipka_y2+"_"+ID[0].X+"_hore;"+cesta1;
}
console.log("spustil2")
}


iY--;
}  
//----------------------------------------  



sorry ten return som tam dal ja len pre ukazku ...je to cez node js a socket.io a express proste websocket ..databaza je ako keby objekt k pripojeniu databazy mne len staci vytiahnut tu premennu VYPIS von
final
Profil
warestarted:
pracujem na niečom podobnom..ale nevidím dôvod načo uchovávaš tie dáta v databáze? O.o
prečo si to nedáš do normálneho pola?
_es
Profil
warestarted:
mne len staci vytiahnut tu premennu VYPIS von
Čo si pod tým „vytiahnutím“ premennej predstavuješ? Či pod „von“ - kam „von“? Asi si nepochopil úplne základné veci ako asynchrónne spracovanie a definovanie a platnosť premenných. Skús si to niekde naštudovať.
warestarted
Profil
final:
potrebujem ich vytiahnut z databazy koli tomu ze toto vypocitava polia kam moze ist...a data preto uchovavam v databaze lebo ked sa hrac odpoji a novy sa pripoji aby sa mu nacitali aktualne data..


_es

vytiahnut ju von z z

//zaciatok
databaza.query('select X,Y from polia where ID="1" AND X="8" AND Y="1";', function aha(err, vypis) { 

console.log(iY)//vypise undefined 1.chyba
});//von     

sem ju vytiahnut dole ale cez return sa neda ako global sa neda...takze neviem ako ju vytiahnem..a zas do nej nemozem dat tie veci lebo zas tam my pise v nej undefined takze chcem ju von.
Chamurappi
Profil
Reaguji na warestarteda:
Viz lexikální uzávěr.
final
Profil
warestarted:
potrebujem ich vytiahnut z databazy koli tomu ze toto vypocitava polia kam moze ist...a data preto uchovavam v databaze lebo ked sa hrac odpoji a novy sa pripoji aby sa mu nacitali aktualne data..
v takom prípade to robíš všetko úplne zle..naštuduj si nejaké tutoriály a pochopíš, zbytočne to komplikuješ..

stačí ti na serveri mať 1 pole so súradnicami..
warestarted
Profil
final:

cize takto...ja na zaciatku posielam premenne koli x,y kde sa co nachadza...ty chces povedat ze nemusim ist znova do databazy ale mozem si to vytiahnut to co som raz uz poslal?
peta
Profil
function aha (err, vypis) { 
  console.log(iY)//vypise undefined 1.chyba
  // vypise undefined, protoze iY neni definovane ve funkci varem a neni definovane ani ajko globalni promenna objektu window (tez varem)
  });//von
query = 'select X,Y from polia where ID="1" AND X="8" AND Y="1";';
databaza.query(query, aha);
Tvuj js/php neznam. Ale jestli spravne chapu, co dela databaza.query, tak se to chova presne jako ajaxova funkce. Odpoved, ikdyz ne uplne jasnou, dal uz Chamurappi.
Ten prikaz spusti casove sledovanou funkci, ktera si periodicky kontroluje, zda ze serveru dorazila data. Data muzou dorazit za 100ms, ale take za 10s. Spustenim databaza.query ale program pokracuje dal, dalsim js prikazem. Jen kdesi na pozadi bezi casovac. Kdyz ta data dorazi, tak spusti (anonymni) funkci, ktere preda jako parametr 1 chybovou hlasku a jako parametr2 data. Uvnitr te funkce pak definujes, so s daty ve tve promenne vypis dal provedes. Treba alert(vypis);
function aha (err, vypis) { 
  alert(vypis);
  console.log(iY)//vypise undefined 1.chyba
  });//von

V podstate podobne je tomu
http://api.jquery.com/load/
$("#success").load("/not-here.php", function(response, status, xhr) {
if (status == "error") {
var msg = "Sorry but there was an error: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
http://api.jquery.com/jQuery.get/
$.get('ajax/test.html', function(data) {
$('.result').html(data);
alert('Load was performed.');
});
warestarted
Profil
socket.get('vypis', function (err, vypis) {
      console.log(vypis);//vypise
      var vypis2 = vypis;
    });
console.log(vypis2);//napise undefined

chcem to vytiahnut mimo funkcie socke.get()
ako to mam spravit??a nemoze to robit vo vnutri
Someone
Profil
warestarted:
Musel bys tu proměnnou definovat vně té funkce:
var vypis2;
socket.get('vypis', function (err, vypis) {
      console.log(vypis);//vypise
       vypis2 = vypis;
    });
console.log(vypis2);//napise undefined
warestarted
Profil
Someone:


super funguje to veeeeeeeeeeeeeeeeelmi pekne dakujem tak isto aj final a Chamurappi

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: