Formulier submit zonder pagina refresh

  • Hi,


    Ik ben voor een opdracht bezig een formulier te bouwen, echter is de gehele website in een index gebouwd (HTML5).
    Nu wil ik bij een submit een PHP code uitvoeren maar zonder dat de hele pagina weer een refresh geeft en dus direct resultaat laat zien.


    Ik ben totaal een n00b op JavaScript en jQuery, dus zoek ik hiervoor hulp, heeft iemand enig idee hoe ik dit kan oplossen ?


    Gr.

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Stefan.J
    Het gaat inderdaad om een one-page-app, echter is de website een 18+ content en deze kan ik dus niet plaatsen sorry.


    Is dit niet mogelijk met een klein stukje code dat PHP de rest uitvoert maar niet de hele pagina in een refresh gooit ?

    Dat heeft niks met PHP te maken fils, luister naar wat BrokenTrack gezegd heeft. Het is puur ajax functies.

  • @Fils,


    Speciaal voor jou een voorbeeld:
    Online: http://jsfiddle.net/vDN2j/


    JS/Jquery code:


    HTML Code:


    Alsjeblieft :)


    Hij wordt gestuurd naar submit.php zoals je in de javascript ziet.

  • Wat jij zoekt is een combinatie van Jquery, Ajax en PHP.


    Met jquery vang je de submit op. Dus dat zou bijvoorbeeld

    Code
    $("body").on("submit", "#idattribuutvanformelement", function() {
    
    
    }


    Om de refresh te cancelen die hij normaal doet. Plaats je return false in de submit.


    Code
    $("body").on("submit", "#idattribuutvanformelement", function() {
    return false;
    }


    Dan daarin bouw je een ajax request. In combinatie zal dat iets zijn als:

    Code
    $("body").on("submit", "#idattribuutvanformelement", function() {
    $elements = $(this).serialize(); //Input velden enzovoort omzetten naar een string
    $.ajax({type: 'POST',url: 'mijnvalidatie.php',
    data: $elements,dataType: 'json',success: function(xhr) {//doe hier wat je wilt doen}});
    return false;
    }


    Zo heb ik je een beetje op weg geholpen. De rest moet je natuurlijk zien te regelen ;)


    Offtopic
    Bij het aanpassen van een bericht worden de enters ook uit de code gescoopt.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • Deze gebruik ik altijd (die van Jopitan kan ook maar is meer schrijfwerk en geloof ik meer gericht op oudere jQuery versies):



    Meer informatie:
    http://api.jquery.com/jQuery.ajax/


    Veel succes nog en als je een vraag hebt dan kan je die altijd aan me stellen :). Ik heb inmiddels 2 jaar jQuery ervaring en ik denk dat ik wel boven gemiddeld zit hier ;).

  • Mijn code is juist efficiënter in vergelijken met jouw code L. Groot en het is juist de nieuwste methode ('on' is een vervanging van 'live').


    Wat jij hier doet:

    Code
    data: "titel="+$("#titel").val()+"&naam="+$("#naam").val(),


    gebeurt bij mij hier:

    Code
    $elements = $(this).serialize();


    Wat bij jou zou moeten gebeuren, als je een veld toevoegt aan een form, is elke keer je javascript code aanpassen. Wat bij mijn code niet hoeft.
    $(this).serialize() zorgt automatisch voor het maken van een string van alle elements.


    Bijvoorbeeld jij hebt het volgende formulier:

    Code
    <form>
    Voornaam <input name="voornaam" />
    Achternaam <input name="achternaam" />
    </form>


    Dan zou jouw code er zo uit moeten zien:

    Code
    data: "voornaam=" + $("input[name=voornaam]").val() + "&achternaam=" + $("input[name=achternaam]").val(),


    Terwijl bij mij zou het altijd het volgende zijn:

    Code
    $elements = $(this).serialize(); (buiten ajax)
    data: $elements, (in de ajax call)


    Als jij nu een extra element zou toevoegen aan het formulier met de naam email is jouw code als volgt:

    Code
    data: "voornaam=" + $("input[name=voornaam]").val() + "&achternaam=" + $("input[name=achternaam]").val() + '&email=' + $("input[name=email]").val() ,


    Terwijl bij mij zou het altijd het volgende zijn:

    Code
    $elements = $(this).serialize(); (buiten ajax)
    data: $elements, (in de ajax call)


    Mijn code blijft daarnaast ook nog werken als je bijvoorbeeld een formulier via een ajax request ophaalt. En mijn code kan efficient worden gebruikt voor meerdere formulieren op dezelfde pagina, zonder extra javascript toe te voegen ;)


    Ik zal hier straks even een voorbeeld onder plakken. Moet even de hond uitlaten.



    Voor alles kan hetzelfde stukje javascript worden gebruikt.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

    Bewerkt één keer, laatst door jopitan ().

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!