[JS] Mootools framework - AJAX Request

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 18-06 20:00
Beste allemaal,

Hieronder een stukje code. Ik roep functie a aan, en voer via het mootools framework een AJAX call uit. De ajax call werkt en ik krijg het antwoord dat ik moet krijgen. onComplete roep ik functie b aan alwaar ik het antwoord in een "globale" variabele wil zetten. Mijn probleem, dit lukt niet. Ik heb werkelijk waar geen enkel idee hoe ik het antwoord buiten de scope van het object kan trekken zodat ik het op een andere plek kan gebruiken. Hieronder mijn code, als men meer wilt weten, dan verneem ik dat graag. Globaal komt het er op neer dat ik dus de response van mn Ajax call in de global test_string wil hebben

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
var test_string = new String();     //string met een globale scope

function a()
{
    new Request({
        url: 'index.php?id=stock&action=add_product_stock_by_ean2',
        method: 'post',
        onComplete: function()
        {
            b(this.response.text);
        }                   
    }).send();
    alert(test_string); // tweede response, en die is leeg
}

function b(response)
{
    alert(response) // erste alert die wordt aangeroepen, die laat de AJAX response netjes zien
    test_string = response;
}


*edit* in antwoord op Muer:

De volgorde is dat functie A wordt aangeroepen, onComplete functie b wordt aangeroepen die als paramter de response meekrijgt. In functie B wordt de response text meegenomen. Daarna wordt de alert van de test_string weer aangeroepen in functie A als ik me niet vergis?

[ Voor 12% gewijzigd door nielsl op 13-12-2010 11:33 ]


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 01:33

MueR

Admin Tweakers Discord

is niet lief

JavaScript:
1
2
3
4
5
function b(response)
{
    alert(response)
    test_string = b;
}

Wat probeer je hier nu te doen dan? Je alert response en zegt vervolgens dat test_string de functie b is?

Overigens moet je wel even goed nadenken over de betekenis van een asynchroon request. In welke volgorde zou je code aangeroepen worden denk je? (hint: maak voor jezelf eens duidelijk welke alert box er getoond wordt)

[ Voor 37% gewijzigd door MueR op 13-12-2010 11:17 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 18-06 20:00
excuus, dat was een type van mijn kant in mn voorbeeld, ik heb het in mn openingspost aangepast

*edit*
Muer, dank voor je opmerking over het Asynchrone uitvoeren, het heeft me aan het denken gezet en inderdaad, als ik een function B aanroep waarin ik die globale variabele instel met mn response test, en daarna een functie C aanroep (zonder parameters) die een alert op mn scherm laat zien van die globale test_string, dan doet hij het. Dank Dank :)

[ Voor 65% gewijzigd door nielsl op 13-12-2010 11:27 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
De volgorde is dat functie A wordt aangeroepen, onComplete functie b wordt aangeroepen die als paramter de response meekrijgt. In functie B wordt de response text meegenomen. Daarna wordt de alert van de test_string weer aangeroepen in functie A als ik me niet vergis?
Asynchroon betekent dat je code niet wacht tot je AJAX-call klaar is. Je alert in functie a wordt dus eerst aangeroepen, maar is dan nog leeg. Vervolgens wordt, als je AJAX-call klaar is functie b aangeroepen en alert het resultaat van je AJAX-call.

Acties:
  • 0 Henk 'm!

  • nielsl
  • Registratie: Januari 2006
  • Laatst online: 18-06 20:00
Bosmonster schreef op maandag 13 december 2010 @ 11:27:
[...]


Asynchroon betekent dat je code niet wacht tot je AJAX-call klaar is. Je alert in functie a wordt dus eerst aangeroepen, maar is dan nog leeg. Vervolgens wordt, als je AJAX-call klaar is functie b aangeroepen en alert het resultaat van je AJAX-call.
Inderdaad, ik had het zelf kunnen bedenken (maar bedacht het niet zelf, kudo's voor jullie :))