Avatar billede hypofysen Nybegynder
10. december 2010 - 08:48 Der er 12 kommentarer og
1 løsning

hent variabel fra db i en funktion

Jeg fik i går hjælp til følgende javascript der laver nogle dynamiske divs.

Mit spørgsmål er nu om det er muligt at få et ekstra parameter med i functionen createBox, der er hentet fra en mysql database.

//tabellen//
id status
box1 | 1
box2 | 0

Det er feltet status jeg gerne vil have med, men kan det lade sig gøre?
--------------------------------------------------------------
<script type="text/javascript">
    function createBox(x, y, height, width, id){
      var elm = document.createElement('div');
      elm.style.left = x+'px';
      elm.style.top = y+'px';
      elm.style.height = height+'px';
      elm.style.width = width+'px';
      elm.style.border = '1px solid red';
      elm.style.position = 'absolute';
      elm.setAttribute('id', id);
      elm.appendChild(document.createTextNode('test'));
      document.getElementById('box').appendChild(elm);
    }
</script>
<script type="text/javascript">
function build()
{
createBox(52,355,71,144,'box1');
createBox(52,355,71,144,'box2');
}
</script>

window.onload = "build()";

<div id="box"></div>
Avatar billede jakobdo Ekspert
10. december 2010 - 09:03 #1
Du kan jo "sagtens" indsætte data fra en database.
Hvis du f.eks. anvender php, kunne du "bare" gøre:

createBox(52,355,71,144,'box1', <?=$status_fra_db;?>);

og så selvfølgelig tilpasse din createBox funktion også.
Avatar billede hypofysen Nybegynder
10. december 2010 - 09:12 #2
ja men det er jo først inde i funktionen jeg ved hvilken status der skal hentes fra db.

funktionen build ligger i en ekstern js fil som automatisk bliver opdateret en gang i døgnet.
Avatar billede jakobdo Ekspert
10. december 2010 - 09:16 #3
Så må du jo lave et ajax kald og kalde en fil, som så henter status fra db i runtime.
Avatar billede hypofysen Nybegynder
10. december 2010 - 09:33 #4
vil jeg kunne gøre noget lignende det her:

var status;
$.get("test.php?id=+id", function(data){
    status = data;
});
Avatar billede jakobdo Ekspert
10. december 2010 - 09:48 #5
Ja, det burde du faktisk godt.
Dog tror jeg du skal flytte lidt rundt, så det bliver:
var status;
$.get("test.php?id="+id, function(data){
    status = data;
});
Avatar billede hypofysen Nybegynder
10. december 2010 - 09:53 #6
det vil sige fælgende burde virke? Jeg har nemlig ikke mulighed for at teste før i aften..

Det med fed er det nye

<script type="text/javascript">
    function createBox(x, y, height, width, id){

var status;
$.get("test.php?id="+id, function(data){
    status = data;
});


      var elm = document.createElement('div');
      elm.style.left = x+'px';
      elm.style.top = y+'px';
      elm.style.height = height+'px';
      elm.style.width = width+'px';
      elm.style.border = '1px solid red';
      elm.style.position = 'absolute';
      elm.setAttribute('id', id);
      elm.setAttribute('class', status);
      elm.appendChild(document.createTextNode('test'));
      document.getElementById('box').appendChild(elm);
    }
</script>
Avatar billede jakobdo Ekspert
10. december 2010 - 09:58 #7
Umiddelbart burde det virker ja.
Dog skal du huske på det giver et kald til test.php for hver box.
Så måske du kunne nøjes med at lave et kald for alle din boxe.
Men prøv.
Avatar billede hypofysen Nybegynder
10. december 2010 - 10:02 #8
jeg prøver så kan det altid optimeres senere :)

Tak for hjælpen - lig et svar
Avatar billede jakobdo Ekspert
10. december 2010 - 10:05 #9
Svar!
Avatar billede jakobdo Ekspert
10. december 2010 - 10:10 #10
Takker for point
Avatar billede intenz Novice
10. december 2010 - 12:11 #11
Jeg tvivler på det vil virke. Du skal huske at ajax er asynkront, dvs. at variablen ikke bliver tilgængelig lige efter du sender kaldet afsted.
Du vil ikke arbejde med status variablen før kaldet bliver returneret. Status variablen vil højst sandsynligt stadig være tom når du bruger den.

Du skal lave en callback fra ajax funktionen, så din createBox funktion først bliver kørt efter kaldet er returneret.
F.eks. sådan:

function prepareBox(x, y, height, width, id) {

  var status;
  $.get("test.php?id="+id, function(data){
    status = data;
    createBox(x, y, height, width, id, status); // kalder først createBox her, med status som parameter.
  });

}

function createBox(x, y, height, width, id, status){ // tilføjet status som parameter

      var elm = document.createElement('div');
      elm.style.left = x+'px';
      elm.style.top = y+'px';
      elm.style.height = height+'px';
      elm.style.width = width+'px';
      elm.style.border = '1px solid red';
      elm.style.position = 'absolute';
      elm.setAttribute('id', id);
      elm.setAttribute('class', status);
      elm.appendChild(document.createTextNode('test'));
      document.getElementById('box').appendChild(elm);
}
Avatar billede intenz Novice
10. december 2010 - 12:13 #12
Eller selvfølgelig bare smide din logik ind i ajax callback funktionen.


function createBox(x, y, height, width, id){

  var status;
  $.get("test.php?id="+id, function(data){
      status = data;

      var elm = document.createElement('div');
      elm.style.left = x+'px';
      elm.style.top = y+'px';
      elm.style.height = height+'px';
      elm.style.width = width+'px';
      elm.style.border = '1px solid red';
      elm.style.position = 'absolute';
      elm.setAttribute('id', id);
      elm.setAttribute('class', status);
      elm.appendChild(document.createTextNode('test'));
      document.getElementById('box').appendChild(elm);

  });

}

Avatar billede hypofysen Nybegynder
10. december 2010 - 13:25 #13
intenz stadig uden at kunne teste det, så må jeg sige det sidste eksempåel du kommer med, lyder som en sandsynlig løsning - jeg takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester