[jQuery] Resultaat van $.post() return-en als functie.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een formulier gemaakt dat middels de $.post() functie wordt gevalideerd. De validatie wordt met een functie aangeroepen, zie:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function validateForm(){
    $.post("result.php", {
        formvalue: value
        },  function(data){
            var response = $.parseJSON(data);
            if(response.success) {
                return true;
            }else{
                return false;
            }
    });
}


Nu wil ik het resultaat van de validateForm functie het resultaat laten zijn van de $.post functie. Op dit moment returned de functie niks, omdat deze binnen de $.post blijft.
Hoe krijg ik dit voor elkaar?

Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14-09 21:34
Dat gaat je niet lukken, ben ik bang. Omdat $.post een asynchrone call zal doen, zal de validateForm methode al aflopen voordat $.post zijn resultaat heeft gekregen. Daarom geef je ook een callback functie mee aan de $.post methode, zodat deze uitgevoerd kan worden als $.post klaar is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Amras schreef op vrijdag 25 maart 2011 @ 08:18:
Dat gaat je niet lukken, ben ik bang. Omdat $.post een asynchrone call zal doen, zal de validateForm methode al aflopen voordat $.post zijn resultaat heeft gekregen. Daarom geef je ook een callback functie mee aan de $.post methode, zodat deze uitgevoerd kan worden als $.post klaar is.
Hmz ok, duidelijk.. En wat nou als ik dit er van maak:
JavaScript:
1
2
$.ajaxSetup({async:false});
$.post ()


Wat zou anders een oplossing / work-around kunnen zijn?

Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14-09 21:34
Verwijderd schreef op vrijdag 25 maart 2011 @ 09:27:
[...]


Hmz ok, duidelijk.. En wat nou als ik dit er van maak:
JavaScript:
1
2
$.ajaxSetup({async:false});
$.post ()
Ik weet niet precies of dit wel gaat werken omdat ik het nog nooit gebruikt heb, maar je moet jezelf wel afvragen of je dit wilt.
Wat zou anders een oplossing / work-around kunnen zijn?
Dat is afhankelijk van wat je wilt doen na het aanroepen van de $.post methode. Het idee is dat je die code in de callback van $.post stopt, zodat deze uitgevoerd wordt als $.post klaar is.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Amras schreef op vrijdag 25 maart 2011 @ 09:30:
[...]

Ik weet niet precies of dit wel gaat werken omdat ik het nog nooit gebruikt heb, maar je moet jezelf wel afvragen of je dit wilt.

[...]

Dat is afhankelijk van wat je wilt doen na het aanroepen van de $.post methode. Het idee is dat je die code in de callback van $.post stopt, zodat deze uitgevoerd wordt als $.post klaar is.
Het uiteindelijke doel is om de functie validateForm een boolean te laten terug geven..

Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14-09 21:34
Dat lijkt mij geen doel opzich, ik bedoelde meer: waarom moet die functie per se een boolean teruggeven? Is het niet op een andere manier op te lossen? Wat gebeurt er met de boolean die de validateForm functie terug moet gaan geven?

Die functie een boolean terug laten geven met het resultaat van de $.post gaat simpelweg niet lukken als je die functie asynchroon laat uitvoeren. Je kan dat wel veranderen naar synchroon, maar dan is het AJAX idee een beetje weg: het wordt dan SJAX. ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Amras schreef op vrijdag 25 maart 2011 @ 09:49:
Dat lijkt mij geen doel opzich, ik bedoelde meer: waarom moet die functie per se een boolean teruggeven? Is het niet op een andere manier op te lossen? Wat gebeurt er met de boolean die de validateForm functie terug moet gaan geven?

Die functie een boolean terug laten geven met het resultaat van de $.post gaat simpelweg niet lukken als je die functie asynchroon laat uitvoeren. Je kan dat wel veranderen naar synchroon, maar dan is het AJAX idee een beetje weg: het wordt dan SJAX. ;)
Hmmz ok, dit gebeurt er voorafgaande aan het proces

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var options = {
    success:        showResponse,
    beforeSubmit:   showRequest
}
$('#new_invoice').ajaxForm(options);
        

function showRequest(){
    var result =  validateForm();
    if(result){
        return true;
    }else{
        return false;
    }
}

Acties:
  • 0 Henk 'm!

  • Chillem.nl
  • Registratie: Augustus 2004
  • Laatst online: 14-09 19:43
Ik ga er maar even van uit dat dat een versimpelde versie is, anders kun je net zo goed het volgende doen:
JavaScript:
1
2
3
4
5
var options = {
    success:         showResponse,
    beforeSubmit:    validateForm        
}
$('#new_invoice').ajaxForm(options);

Maar dat terzijde ;).

In deze situatie zou je de in jQuery 1.5 geintroduceerde Deferreds kunnen gebruiken. Hier staat bijvoorbeeld een goede uitleg.

Acties:
  • 0 Henk 'm!

  • Amras
  • Registratie: Januari 2003
  • Laatst online: 14-09 21:34
Als ik het goed begrijp wil je voordat je een form submit eerst een callback doen naar de server om het form te valideren? Waarom valideer je de waarden in het form niet in de daadwerkelijke submit server-side en bepaal je daar of je de submit wel of niet uitvoert? Volgens mij is die beforeSubmit meer bedoeld om client-side nog checks te doen voordat je je request naar de server verstuurt.

Misschien dat deze functionaliteit in jouw specifieke situatie wel nodig is, maar dat blijkt (nog) niet uit je codevoorbeelden.

Acties:
  • 0 Henk 'm!

  • Mercatres
  • Registratie: September 2009
  • Laatst online: 13-09 16:34
Niet geheel ontopic, maar er is een jQuery UI Validation plugin. Daar kan je heel veel leuke dingetjes mee doen, onder andere remote validation (met JSON).
http://jquery.bassistance.de/validate/

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Mercatres schreef op vrijdag 25 maart 2011 @ 17:57:
Niet geheel ontopic, maar er is een jQuery UI Validation plugin. Daar kan je heel veel leuke dingetjes mee doen, onder andere remote validation (met JSON).
http://jquery.bassistance.de/validate/
Inderdaad niet geheel on-topic, maar wel een goede oplossing. Ik ken de plugins van bassistance, ik gebruik echter een andere (http://malsup.com/jquery/form/), deze ondersteunt ook validatie en het uploaden van bestanden.
Pagina: 1