Heej,

Ik heb één functie die ziet er zo uit...

            function ajax(url, post, container, loadcontainer, loading) {
                
                var ajax_result;
                
                loading = typeof(loading) != 'undefined' ? loading : 'Loading...';

                loadcontainer = typeof(loadbar) != 'undefined' ? loadcontainer : container;

                $(loadcontainer).html("Loading...").show();

                $.post(url, post, function(data) {

                    $(container).html(data);
                    ajax_result = data;
                });

                return ajax_result;
            }



Wat ik nu verwacht van die functie dat die een (php)file oproept. Dat doet die ook. Maar als ik de ajax functie in een andere functie zou gebruiken. bijvoorbeeld:


functie doeiets() {
    var a = ajax(bla, bla, bla, bla);

    
}

dan zou ik denken dat er in a de content die ik terug kreeg van de opgeroepen pagina staat. Maar als ik em bijvoorbeeld simpel laat zien met jQuery in 1 div

functie doeiets() {
    var a = ajax(bla, bla, bla, bla);

    $("#result2").html(a);
}

Dat doet die niet. Ik heb dit ook geprobeerd:


functie doeiets() {
    var a = ajax(bla, bla, bla, bla);

    document.write(a);
}

Dan krijg ik undefined te zien..

Kan iemand mij helpen?
Zou je er maby Code tags omheen kunnen zetten ?
en de topic titel aanpassen omdat "probleem" geen correcte/goede titel is..

Marco PHPJunkie op 11/01/2012 22:42:48

Zou je er maby Code tags omheen kunnen zetten ?
en de topic titel aanpassen omdat het geen correcte/goede titel is..




Zoiets??
Zo werkt ajax niet.

Ajax is asynchroon. Dat wil zeggen, javascript gaat op zijn eigen tempo, achter je rug connectie zoeken met de server. Dat gebeurt niet onmiddellijk, dus je kunt niet zomaar die opgehaalde data als return verwachten.

Javascript verwittigt je, wanneer het de data heeft opgehaald, door een functie (callback) aan te roepen.

In jouw geval is dat dus:

function(data) {

  $(container).html(data);
  ajax_result = data;
}


Alles wat je van plan bent met die data, moet je in die functie regelen.

Let er ook op: je zit daar in een andere functie. Variabelen die in je request zijn aangemaakt kan je niet gebruiken in deze functie; en vice versa
Ik heb ook gehoord over closures zou dat een goeie oplossing zijn?

[size=xsmall]Toevoeging op 11/01/2012 23:49:19:[/size]

naaaah, Ik maak wel gewoon elke functie apart :p maar dankje voor het helpen :p

Reageren