Avatar billede Gudiik Nybegynder
06. oktober 2009 - 17:41 Der er 12 kommentarer og
1 løsning

Opdatere en div boks.

Hej allesammen, er igang med at prøve og lave en chat, hvor jeg så laver tekst området inde i en div.

Har søgt lidt rundt her på siden, og har fundet noget som var lige det jeg søgte, men kan ikke få den til at vise noget, så aner ikke om det virker.

Min kode ser sådan her ud:

<div id=\"tal\"></div>
<script type=\"text/javascript\">
setInterval(function() {
  $(\'tal\').load(\'hent_tal.php\');
  }, 5000);
</script>

Og hent_tal:
<? echo \"1\"; ?>

Problemmet er at den ikke viser noget overhovedet, bare en blank side.
Avatar billede TagMan101 Nybegynder
07. oktober 2009 - 09:24 #1
Jeg ved ikke om det hjælper, men alle dine enkelt og dobbelt citationstegn har en backslash for meget(De er escaped) i forhold til valid HTML.
Derudover ser det ud som om du skal bruge et JavaScript bibliotek(Jquery??), med funktionen "setInterval", men det har du måske styr på?

Prøv om det bliver bedre med det her:

<div id="tal"></div>
<script type="text/javascript">
setInterval(function(){$('tal').load('hent_tal.php');}, 5000);
</script>

Jeg kender ikke PHP så der må du selv finde ud af om de skal fjernes.
Og hent_tal:
<? echo \"1\"; ?>
Avatar billede ebusiness Nybegynder
07. oktober 2009 - 12:22 #2
@TagMan101 setInterval er en standard JavaScript funktion, der kræves ingen biblioteker for at bruge den.

@Gudiik du har brug for at lære JavaScript, W3Schools er et godt sted at starte: http://www.w3schools.com/

Det du prøver på at gøre er der et godt eksempel på her: http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_httprequest_js1

Men det bør du nok gemme til senere og starte med noget lidt mere basalt.
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 12:24 #3
hmm, det virker desværre heller ikke.
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 19:59 #4
lukket
Avatar billede olebole Juniormester
07. oktober 2009 - 20:24 #5
<ole>

Gudlik >> Du skal nok lige delagtiggøre os andre i løsningen?  ;o)

ebusiness >> TagMan påpeger blot, at setInterval i spørgerens kode åbenbart er wrapped i et bibliotek. Udfra koden gætter han på, der er tale om jQuery, som så naturligvis skal være inkluderet.
"men det har du måske styr på?" tilføjer han derfor.

Derudover findes der næppe et dårligere sted at forsøge at lære Ajax end w3schools.com. Sitet er herostratisk berømt for dets utallige mangler, udeladelser og seriøse fejl. Ofte har vi i E-tråde fundet op til 4-6 alvorlige fejl pr. side ... og hans såkaldte 'Ajax' tutorial hører absolut ikke til det bedste! Den har kun ganske, ganske lidt med Ajax at gøre

/mvh
</bole>
Avatar billede ebusiness Nybegynder
07. oktober 2009 - 21:57 #6
Fair nok, har du et forslag til en alternativ guide?
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 22:10 #7
olebole, lukkede det fordi jeg har en andet åbent, hvor jeg havde mixet lidt sammen, og søgte så noget hjælp der i stedet.
Avatar billede olebole Juniormester
07. oktober 2009 - 22:11 #8
Den slags flyder det ikke ligefrem med  :o|

Et godt sted at starte er hos manden, som navngav teknikken:
    http://adaptivepath.com/ideas/essays/archives/000385.php

Derudover kan jeg anbefale min XMLHttpRequest wrapper:
    http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- og overholdelse af nogle enkle regler:

*) Brug POST som method med mindre, du har en helt speciel grund til at bruge GET
*) Returner aldrig HTML-formateret kode fra serveren. Returner rå data som JSON eller XML
*) Brug DOM til at indsætte data i siden. innerHTML har nogle svære uhensigtsmæssigheder - og er desuden invalid
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 22:18 #9
olebole, forstår ikke ret meget af dine 2 sidste råd, da jeg ikke har noget forstand på javascript eller lign. og vil gerne lærer det, men gider bare ikke bruge så meget tid på det da jeg kun skal bruge det til den her lille ting.

Desuden er engelsk ikke mig store talent. Men kan jeg gøre det ved at læse din guide på dengodekode?
Avatar billede olebole Juniormester
07. oktober 2009 - 23:29 #10
Hvis du vil bygge en Ferrari, bør du begynde at lære en hel masse om mekanik, længe før du vil påbegynde bygningen  ;o)

Her er et eksempel på, hvordan du kan bruge wrapper'en:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Ajax Eksempel - http://www.eksperten.dk/spm/888717</title>
<script type="text/javascript">
// XMLHttpRequest wrapper: http://dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php
var sAX="MSXML2.XMLHTTP.6.0 MSXML2.XMLHTTP.3.0 Msxml2.XMLHTTP Microsoft.XMLHTTP";
(function(){var x=window.XMLHttpRequest;if(!x){var o=s=null,a=sAX.split(" ");for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}}window.XMLHttpRequest=x?x:o?function(){return new ActiveXObject(s)}:null;o=null;sAX=undefined})();

// Ajax funktion
function myAjaxRequest(sUrl, oVars, fnHandler) {
    var oHttp = new XMLHttpRequest();
    oHttp.open("post", sUrl, true);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = function(){
        if (oHttp.readyState<4) return;
        fnHandler(oHttp.responseText);
        oHttp = null;
    };
    var x, sQ, aQuery = [];
    for (x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    sQ = aQuery.length>0 ? aQuery.join("&") : null;
    oHttp.send(sQ);
   
}

function getUsers() {
    // Tøm TBODY'en, hvis der er rækker i den
    while (oDispl.firstChild) oDispl.removeChild(oDispl.firstChild);
   
    // Opret en variabel, som serverscriptet kan genkende
    // og bruge til at vælge at gøre det ønskede
    var oVars = {"contxt": "getUsers"};
   
    // Send en Ajax request
    myAjaxRequest("response.php", oVars, fillDisplay);
}

// Callback funktion, som fylder rækker i TBODY'en
function fillDisplay(sResponse) {
    // Opret et JS-object udfra JSON-strengen fra serveren
    var oResp = eval("(" + sResponse + ")");
   
    // Udfør handlinger ved evt. fejl
    if (!oResp) return alert("Some unforeseen shit hit the fan!");
    if (oResp.error) return alert(oResp.error);
   
    // Indsæt data med DOM
    var oClone = aTD = null, oFrag = document.createDocumentFragment();
    for (var i=0,j=oResp.rows.length; i<j; i++) {
        oClone = oTempl.cloneNode(true);
        oClone.setAttribute("userID", oResp.rows[i].id);
        aTD = oClone.getElementsByTagName("td");
        aTD[0].firstChild.nodeValue = oResp.rows[i].u_name;
        aTD[1].firstChild.nodeValue = oResp.rows[i].u_sex;
        aTD[2].firstChild.nodeValue = oResp.rows[i].u_birth;
        oClone.style.background = i%2==0 ? "#fff" : "#f0f0f0";
        oFrag.appendChild(oClone);
    }
    oDispl.appendChild(oFrag);
    oResp = null;
}

// Testfunktion, som alert'er et eller andet ved rækken
function rowClick(oTR) {
    alert(oTR.getAttribute("userID"))
}

var oDispl = oTempl = null;
window.onload = function(){
    oDispl = document.getElementById("userDisplay");
    oTempl = oDispl.getElementsByTagName("tr")[0];
    oDispl.removeChild(oTempl);
}
</script>
</head>
<body>

<p><button onclick="getUsers()">Hent brugere</button></p>
<table>
<thead>
<tr>
    <th>Navn</th>
    <th>Køn</th>
    <th>Fødeår</th>
</tr>
</thead>
<tbody id="userDisplay">
<tr onclick="rowClick(this)">
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
</tr>
</tbody>
</table>

</body>
</html>


- og response.php kunne så se sådan ud:


<?php
header("Content-Type: application/json");

function getUsers($oJson) {
    $oJson->rows = array();
    $result = [MYSQL_QUERY];
    while ($row=mysql_fetch_object($result)) {
        array_push($oJson->rows, $row);
    }
}

$oJson = new stdClass();
if (isset($_POST['contxt'])) {
    switch ($_POST['contxt']) {
        case 'getUsers':
            getUsers($oJson);
        break;
       
        default:
            $oJson->error = "'contxt' identifier not recognized.";
    }
}
else $oJson->error = "No 'contxt' identifier found.";

$sJson = json_encode($oJson);
header("Content-Length: ".strlen($sJson));
print $sJson;
?>


Det er dog stadig temmelig urealistisk at ville bruge Ajax uden at kunne JavaScript ... uanset, hvor lille en ting man vil bruge det til  =)
Avatar billede Gudiik Nybegynder
07. oktober 2009 - 23:47 #11
Ole bole>

Det med at lærer mekanik bliver nok ikke et problem da jeg er udlært mekaniker :D.

Men tak for dit eksempel, prøver lige at kigge på det i morgen.
Men hvad er funktionen i dit eksempel?
Avatar billede olebole Juniormester
08. oktober 2009 - 00:02 #12
PHP-scriptet hiver rækker ud af en MySQL-tabel, som har felterne: id, u_name, u_sex og u_birth. Disse rækker returneres til browseren som en JSON-streng:
    http://json.org/

Når responsen ankommer til browseren, oprettes et JS-object. På det objekt findes en property ved navn rows. Hvert element i dette array svarer til en række i databasen
Avatar billede olebole Juniormester
08. oktober 2009 - 00:04 #13
- og data indsættes i tabellen, hvor brugeren kan se dem
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