Avatar billede shjorth Nybegynder
01. februar 2009 - 14:00 Der er 17 kommentarer og
1 løsning

AJAX løsning

Hejsa.

En bruger kan ændre et tal i databasen. Dertil kunne jeg godt tænke mig en lille funtion der udskriver det felt fra databasen, men som opdaterer det hele tiden..

Det skal med andre ord ikke gøres ved et tryk, men nærmest bare en "opdater hvert sekundt" funktion.. Men for at undgå alt det blinkeri og klikken ville det være fedt at gøre med ajax.

Er der nogen der kender en løsning / sted hvor jeg kan finde sådan noget??

Mange tak
Avatar billede olebole Juniormester
01. februar 2009 - 15:23 #1
<ole>

Jeg forstår ikke, hvad "en lille funtion der udskriver det felt fra databasen, men som opdaterer det hele tiden.." betyder. Hvad skal funktionen gøre?

Det er absolut ikke hensigtsmæssigt, hvis siden skal opdatere noget hvert sekund, sålænge siden ligger i browseren, så en anden løsning er måske smartere(?)

/mvh
</bole>
Avatar billede shjorth Nybegynder
01. februar 2009 - 15:32 #2
Jeg bruger AJAX lige nu, hvor en bruger kan opdatere i databasen, og det virker fortræffeligt.

Problemet er at jeg har et felt der hedder "Point i alt", som også skal opdateres.
Til det ville jeg gerne lave et eller andet der kiggede i min db, om tallet havde ændret sig, og så skrev det nye tal.. Gerne med AJAX eller lign.

Kan også være med JS, men kan ikke lige gennemskue hvordan.
Avatar billede olebole Juniormester
01. februar 2009 - 15:51 #3
Én gang i sekundet er langt ude i hegnet, uanset hvad du gør nu  =)

Hvis du i forvejen bruger Ajax, er opdateringen ligetil. Du udskriver data som JSON eller XML på serveren. Når request'en så returnerer til browseren, indsætter du de returnerede data i siden med DOM/JavaScript. Det er dét, Ajax er  =)
Avatar billede shjorth Nybegynder
01. februar 2009 - 16:05 #4
if (isset($_REQUEST['action'])) {
update blaaa...
}

echo "Points left: $left";

<div id='no1'>$attack</div> <a href='#'onclick="do_ajax('no1','attack','".$user_id."');return false;">Increase by 1</a>

<div id='no2'>$defense</div> <a href='#'onclick="do_ajax('no2','defense','".$user_id."');return false;">Increase by 1</a>

<script type="text/javascript">
function do_ajax(div,val,userid) {
    var ajax = new Ajax();
    ajax.responseType = Ajax.FBML;
    ajax.ondone = function(data) {
            document.getElementById(div).setInnerFBML(data);
    }
    ajax.requireLogin = 1;
    var params={"action":'select',"option":val,"userid":userid};  //add parameters as comma separated "param":value
    ajax.post('<?=$callbackurl?>',params);
}
</script>

Sådan ser det ud.. MEN når man increaser by 1, skal "points left" jo også opdateres!
Avatar billede olebole Juniormester
01. februar 2009 - 16:28 #5
Det får jeg ikke meget ud af. Jeg aner jo bl.a. ikke, hvad din Ajax-klasse indeholder  =)
Avatar billede shjorth Nybegynder
01. februar 2009 - 16:31 #6
Det aner jeg virkelig heller ikke :D
Thats it, og det virker..
Men ved du om det kan lade sig gøre med javascript eller lign? Er ikke interesseret i at skulle opdatere hele siden.. Så dør ideen med ajax
Avatar billede olebole Juniormester
01. februar 2009 - 17:06 #7
Jamen, du kan sagtens gøre det med Ajax - men jeg kan jo ikke hjælpe dig, når jeg ikke kan se, hvad du gør  =)
Avatar billede shjorth Nybegynder
01. februar 2009 - 18:17 #8
Hvad jeg leder efter er en ajax funktion der kan hente og udskrive et enkelt tal fra databasen.
Tanken er at den skal se om tallet har ændret sig, og i så fald udskrive det.

Det skal altså ikke være styret af et "bruger tryk", men enten på tid, eller ?

Jeg vil gerne betale lidt for det hvis det er noget du kan skaffe :)? Dog meget begrænset hvad jeg har at gøre godt med.
Avatar billede olebole Juniormester
01. februar 2009 - 19:20 #9
Når du allerede har en Ajax-klasse kørende, giver det ikke mening at efterlyse endnu én. Find ud af, hvad din eksisterende Ajax-klasse kan og brug det  ;o)
Avatar billede shjorth Nybegynder
01. februar 2009 - 19:28 #10
Som sagt har jeg slet ikke forstand på det.. Men har forsøgt hele dagen på at lave noget med den jeg har, og det virker ikke..
Så hvis det kan løses ved at lave en ny, så er det fint med mig.

Hele humlen er at jeg skal have lavet et ajax script som ikke skal styres af et "bruger-tryk" men af siden selv..

og som sagt betaler jeg da gerne lidt. Et par flasker vin eller lign.
Avatar billede olebole Juniormester
01. februar 2009 - 19:32 #11
Jamen, der er ingen, der kan have nogen idé om, hvad du skal gøre. Vi ved intet om, hvad du laver  =)
Avatar billede shjorth Nybegynder
01. februar 2009 - 19:42 #12
Troede egentlig jeg havde skåret det ud i pap, men allright:

[attack]
3

Det trækker jeg ud fra min database og skriver på siden.
Det tal vil jeg gerne ændre (med ajax?) hvis det ændrer sig i databasen. Det vil sige at (Ajax?) skal lave hyppige check og se om det ændrer sig, og hvis det gør, skrive det nye tal.
Eller også skal det gøres så JS/Ajax opdaterer tallet en gang hvert 5 min.

Det er det jeg godt kunne tænke mig :)
Avatar billede shjorth Nybegynder
01. februar 2009 - 19:44 #13
hvert 5 sek naturligvis
Avatar billede olebole Juniormester
01. februar 2009 - 19:45 #14
Prøv at lægge et link, så jeg kan se, hvad du har af kode
Avatar billede shjorth Nybegynder
01. februar 2009 - 19:49 #15
Den kode jeg har i forvejen skal egentlig ikke bruges, da den nye jeg skal have lavet kører i en iframe, og den ajax type der er brugt er i øvrigt via facebook, så det kan vist slet ikke bruges her. :)
Avatar billede olebole Juniormester
04. februar 2009 - 22:06 #16
Det er svært at anvise præcist, hvad du skal gøre, når jeg ikke er helt inde i, hvad du vil gøre (nej, det er ikke skåret ud i pap ;). I princippet kan du dog gøre noget à la:

<script type="text/javascript">
(function(){if(window.XMLHttpRequest)return;var o=null,s,a=["MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];for(var i=0,j=a.length;i<j;s=a[i],i++){try{if(o=new ActiveXObject(s))break}catch(e){}}window.XMLHttpRequest=o?function(){return new ActiveXObject(s)}:null;o=null})();

var sUrl = "http:/www.domain.dk/sti/til/ajax.php";

function AjaxReq(sMethod, sUrl, oVars, fnCallBack) {
    var oHttp = new XMLHttpRequest();
    oHttp.open(sMethod, sUrl, true);
    oHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    oHttp.onreadystatechange = _fnCallBack;
    var aQuery = [];
    for (var x in oVars) aQuery.push( encodeURIComponent(x) + "=" + encodeURIComponent(oVars[x]) );
    oHttp.send( aQuery.join("&") );
    aQuery = null;
   
    function _fnCallBack() {
        if (oHttp.readyState<4) return;
        fnCallBack(oHttp);
        oHttp = null;
    }
    return this;
}
function myCallBack(oHttp) {
    document.getElementById("respDiv").firstChild.nodeValue = oHttp.responseText;
}

function foo() {
    var oVars = { // Variabler, der skal sendes til serveren
        "varA": "value A",
        "varB": "value B",
        "varC": "value C"
    };
    new AjaxReq("POST", sUrl, oVars, myCallBack);
}
window.onload = function(){
    setInterval("foo()", 5000);
}
</script>

<div id="respDiv">&nbsp;</div>
Avatar billede olebole Juniormester
04. februar 2009 - 22:09 #17
På serveren kan du så:

<?php
/*
    Modtag post-variablerne
    $_POST["varA"], $_POST["varB"] og $_POST["varC"]
    - og gør noget med dem.
*/

// Udskriv en response som tekst (ingen HTML)
print "En eller anden response";
?>
Avatar billede shjorth Nybegynder
12. juni 2010 - 20:50 #18
Super.. Det virkede.

Jeg lukker her, men skriv endelig, så får du points
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