Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[JS / AJAX] Probleem met ophalen van info uit database

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo dit is een script dat aangeeft hoeveel ongelezen berichten je hebt.

dit is het ajax gedeelte:
locatie: /js
naam:: aantalberichten.js
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function berichtenOphalen(){

var http;

if(window.ActiveXObject){

http = new ActiveXObject("Microsoft.XMLHTTP");


}else{

http = new XMLHttpRequest();
}


http.open('get','../toegang.php?pag=aantalberichten.php',true);
http.onreadystatechange = dataHandle;
http.send(null);


function dataHandle(){

if(http.readyState == 4 && http.status == 200){

var aantalberichten = http.responseText;


document.getElementById('aantalberichten').innerHTML = http.responseText;


}else if(http.readyState == 1){


document.getElementById('aantalberichten').innerHTML = "**";


}


}
}

setInterval("berichtenOphalen()",10000);



dit is het php gedeelte:
locatie: /root/
naam:: aantalberichten.php
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

include "db.php";

include "userinfo.php";



$berichten_info3 = mysql_query("SELECT * FROM berichten WHERE ontvanger_id = '".$user_id."' && gelezen = '0' ");

$aantal_berichten3 = mysql_num_rows($berichten_info3);


if($aantal_berichten3 > 0){


echo"(<b>".$aantal_berichten3."</b>)";

}





?>


op <<aantalberichten.php>> geeft ie de output : bv.: (3)
maar in de <span id="aantalberichten> op de pagina , zet mijn ajax script altijd (1) ,
ik snap echt niet meer wat er fout loopt.

alvast bedankt,

funnyplay

[ Voor 0% gewijzigd door een moderator op 28-08-2008 20:44 . Reden: code duidelijker maken ]


  • Patriot
  • Registratie: December 2004
  • Laatst online: 16-11 16:51

Patriot

Fulltime #whatpulsert

Test je in IE? Probeer dan even van deze regel:

JavaScript:
1
http.open('get','../toegang.php?pag=aantalberichten.php',true);


In deze:

JavaScript:
1
http.open('get', '../toegang.php?pag=aantalberichten.php&rand=' + Math.random(), true);


Internet Explorer cache't namelijk redelijk fanatiek.

  • André
  • Registratie: Maart 2002
  • Laatst online: 13-11 13:40

André

Analytics dude

Dit is geen fix-mijn-script desk. Wat heb je zelf al geprobeerd, waar denk je dat het fout gaat?

  • mr_derk
  • Registratie: September 2005
  • Laatst online: 16-11 21:52
check eerst je accolades, dit lijkt nergens op.

  • Room42
  • Registratie: September 2001
  • Niet online
Misschien handig om je code ook even wat leesbaarder te maken door met tabs/spaties in te springen:
 

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function berichtenOphalen(){

   var http;

   if(window.ActiveXObject){
      http = new ActiveXObject("Microsoft.XMLHTTP");
   }else{
      http = new XMLHttpRequest();
   }

   http.open('get','../toegang.php?pag=aantalberichten.php',true);
   http.onreadystatechange = dataHandle;
   http.send(null);
}
^^^ deze mistte!

function dataHandle(){
   if(http.readyState == 4 && http.status == 200){
      var aantalberichten = http.responseText;
      document.getElementById('aantalberichten').innerHTML = http.responseText;
   }else if(http.readyState == 1){
      document.getElementById('aantalberichten').innerHTML = "**";
   }
}

}
^^^ Wat doet deze hier??

setInterval("berichtenOphalen()",10000);
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

include "db.php";
include "userinfo.php";

$berichten_info3 = mysql_query("SELECT * FROM berichten WHERE ontvanger_id = '".$user_id."' && gelezen = '0' ");

$aantal_berichten3 = mysql_num_rows($berichten_info3);

if($aantal_berichten3 > 0){
   echo"(<b>".$aantal_berichten3."</b>)";
}
?>


Zo, weer een foutje opgelost, alleen maar door het leesbaarder te maken ;)

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Verwijderd

Room42 schreef op donderdag 28 augustus 2008 @ 22:46:
Misschien handig om je code ook even wat leesbaarder te maken door met tabs/spaties in te springen:
 

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function berichtenOphalen(){

    //}
    //^^^ deze mistte!
    // Nee hoor, kijk maar:

    function dataHandle(){
    }
}
// ^^^ Wat doet deze hier??
// Dit is nou een closure
Zo, weer een foutje opgelost, alleen maar door het leesbaarder te maken ;)
En dat hoeft dus helemaal geen foutje te zijn ;) Door het gebrek aan inspringen leek het er inderdaad wel op.

  • Room42
  • Registratie: September 2001
  • Niet online
Ow... kan dat bij JavaScript? Een function binnen een function? Vet, dat kende ik nog niet :) Hoe pas je dat nuttig toe?

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Verwijderd

Topicstarter
Ik heb het zelf al opgelost, en het script werkt, ik was gewoon een sessie vergeten te starten en zonder sessie werkt userinfo.php niet
dus MIJN SCRIPT WERKT WEL!

ps: dit topic mag verwijderd/gesloten worden

  • Room42
  • Registratie: September 2001
  • Niet online
Ow nou sorry, hoor :X >:)
ps: dit topic mag verwijderd/gesloten worden
Dat is alleen nodig als je topic niet aan de policy voldoet ;)

"Technological advancements don't feel fun anymore because of the motivations behind so many of them." Bron


Verwijderd

Topicstarter
een function binnen een function is toch logisch dat dat kan!

Verwijderd

Verwijderd schreef op vrijdag 29 augustus 2008 @ 10:45:
een function binnen een function is toch logisch dat dat kan!
Niet algeheel logisch.

In jouw geval bijvoorbeeld zou het veel "netter" zijn om er daadwerkelijk twee losse functies van te maken waarbij je dataHandle() een losse functie maakt die de opgehaalde tekst in een opgegeven element plaatst. Ook zou ik je HTTP object loshalen en buiten de functies halen :)

Functies binnen functies leveren vaak een algehele zooi aan on-onderhoudbare zooi op. (Notice: vaak).

[ Voor 49% gewijzigd door Verwijderd op 29-08-2008 11:05 ]


Verwijderd

Verwijderd schreef op vrijdag 29 augustus 2008 @ 10:55:
In jouw geval bijvoorbeeld zou het veel "netter" zijn om er daadwerkelijk twee losse functies van te maken waarbij je dataHandle() een losse functie maakt die de opgehaalde tekst in een opgegeven element plaatst.
Ben ik niet met je eens. Omdat dataHandle() een functie is die alleen maar binnen die scope wordt aangeroepen encapsuleer je die zo mooi. De functie naar buiten verplaatsen zou alleen maar de global namespace vervuilen.

Verwijderd

Verwijderd schreef op vrijdag 29 augustus 2008 @ 14:36:
[...]

Ben ik niet met je eens. Omdat dataHandle() een functie is die alleen maar binnen die scope wordt aangeroepen encapsuleer je die zo mooi. De functie naar buiten verplaatsen zou alleen maar de global namespace vervuilen.
In dat geval zou je dus binnen elke functie die content ophaalt een datahandle functie moeten hebben terwijl je mijns inziens beter af bent met een generiekere datahandle functie mocht je eens van plan zijn om ipv innercontent via de dom te gaan werken of wat dan ook :)

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16-11 21:54

TeeDee

CQB 241

Verwijderd schreef op vrijdag 29 augustus 2008 @ 14:56:
[...]
... mocht je eens van plan zijn om ...
YAGNI

[ Voor 12% gewijzigd door TeeDee op 29-08-2008 16:34 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

Raar verhaal dit, als je via deze manier werkt ga je gegarandeerd last krijgen van DRY om maar in de vage afkortingen te blijven ;)

Daarbij is dit niet echt YAGNI, juist door die functie los te halen krijg je minder code bloat etc :)

Wel even dat het hier om 20 regels code gaat, waar hebben we het eigenlijk over 8)7

[ Voor 19% gewijzigd door Verwijderd op 29-08-2008 16:52 ]

Pagina: 1