Form submit zonder refresh

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jan terhuijzen

jan terhuijzen

05/03/2012 22:17:59
Quote Anchor link
Hallo,
ik ben al een tijd opzoek naar een javascript/AJAX script dat een formulier verzendt zonder dat de pagina hoeft te worden herladen en dat de data kan worden verwerkt met PHP zoals in een database zetten.
Ik weet dat het mogelijk is, en ik heb al op internet gezocht. Ik heb ook vanalles gevonden maar het is te uitgebreid. De scripts die ik op internet vind zijn met formuliervalidaties of onnodige (lelijke) effecten en ik hoef aleen maar een formulier te verzenden, niet te controleren enz..
Weet iemand een link naar zo'n script?
Ik heb namelijk aleen verstand van server side scripttalen.
 
PHP hulp

PHP hulp

25/11/2024 00:35:55
 
Reshad F

Reshad F

05/03/2012 23:30:06
Quote Anchor link
hoe bedoel je dat de pagina niet herladen?

volgens mij wat je ook doet bij een input in een database moet een pagina een event uitvoeren wil je dat er iets gebeurt. dan herlaad de pagina automatisch.
 
Kris Peeters

Kris Peeters

05/03/2012 23:35:50
Quote Anchor link
Okay, een soort mini-tutorial; veel korter lukt me niet.

Ik doe het met jQuery (in mijn geval laad ik jquery vanaf een Google domein. Je kan dit zo laten, of je downloadt het ...)

index.php
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $sql = "INSERT INTO my_table (phone, mail, site) VALUES (
    '"
. mysql_real_escape_string($_POST['phone']) . "',
    '"
. mysql_real_escape_string($_POST['mail']) . "',
    '"
. mysql_real_escape_string($_POST['site']) . "'
  )"
;
  // ... verder afhandelen
  if(!empty($_SERVER['HTTP_X_REQUESTED_WITH'])) {  // indien het een AJAX request is
    echo 'Berichtje van het Ajax front. $sql: <br/>' . $sql;  // hier kan je bv. de gebruiker verwittigen dat het gelukt is of niet
    exit;  //
  }
  else {  // wie weet heeft de gebruiker javascript af gezet.  Op deze manier vangen we dit ook op
    // eventueel doe je hier verder nog iets ...

    header('location: index.php');
  }
}

?>

<html>
  <head>
    <title>Ajax formulier met jQuery - voorbeeld</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script src="js.js" type="text/javascript"></script>
  </head>
  <body>
    <form id="my_form" method="post" action="index.php">
      <input name="phone" /> Telefoonnummer<br/>
      <input name="mail" /> e-mail<br/>
      <input name="site" /> site<br/>
      <input type="submit" value="OK"/>
    </form>
    <p id="message">Hier komt straks een bericht</p>
  </body>
</html>


js.js
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$(document).ready(function(e) {  // op het moment dat alle HTML-elementen geladen zijn (klaar voor de DOM), gaan we volgende functie uitvoeren:
  $('#my_form').submit(function(e) {  // op het moment dat de gebruiker het formulier probeert te verzenden, neemt javascript het over.  Dan doen we dit:
    e.preventDefault();  // hiermee vertellen we: zorg er voor dat je niet uitvoert wat je normaal zou doen.  Normaal wordt nu het formulier verzonden.  Dit wordt hiermee dus vermeden.  We zullen dus ook de pagina niet verlaten
    // this is een object dat het "aangesproken" element bevat.  In dit geval is dit dus <form id="my_form"></form>.
    var data = $(this).serialize();  // de gegevens van het formulier worden hiermee gelezen en in een object gestoken; rekening houdend met de name
    // nu gaan we een Ajax-verzoek doen
    $.ajax({
      type: 'post',
      url: 'index.php',
      data: data,
      success: function(message) {  // op het moment dat een Ajax verzoek met succes is beindigd, voeren we deze functie uit:
        // message is een bericht dat van de server is is gestuurd.  Dit kan van alles zijn
        // laat ons dit bericht posten in de <p></p>
        $('#message').html(message);
      }
    });
  });
});
Gewijzigd op 05/03/2012 23:47:19 door Kris Peeters
 
Reshad F

Reshad F

05/03/2012 23:50:40
Quote Anchor link
@kris even een offtopic vraag op wat je net post als je wilt kijken of iemand js uit heeft staan kan je dat niet beter met jQuery zelf beter oplossen? door bijv de class te geven aan je html en daarop te controleren?

voorbeeld

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
(function () {

('html').addClass ('js');

}

)();


en controleren of die class is meegekregen zo niet voer de php code o.i.d. uit zo ja voer de JS code uit
 
Kris Peeters

Kris Peeters

05/03/2012 23:54:33
Quote Anchor link
Indien javascript af staat, wordt dat allemaal niet gecontroleerd en geraakt die informatie niet bij de server (de name en de value worden naar de server gestuurd. Verder niets van classes of zo).
Wat je ook kan doen, is in geval van een ajax call de url een extra waarde meegeven, dus bv.


$.ajax({
type: 'post',
url: 'index.php?ajax=1',
...
Gewijzigd op 05/03/2012 23:59:00 door Kris Peeters
 
Reshad F

Reshad F

06/03/2012 00:36:08
Quote Anchor link
maar je kan toch controleren of de html de class JS heeft of niet? want als JS uit staat zal die functie nooit uitgevoerd worden en krijgt de html tag ook geen class="js"

dan weetje dat js niet aan staat omdat hij de class niet ziet want de class wordt alleen gegeven als js aan staat.
 
Erwin H

Erwin H

06/03/2012 08:53:08
Quote Anchor link
En hoe dacht je dat "te weten" dan. Als Javascript uit staat werkt dus geen enkele javascript code, dus kan je ook niets controleren.
 
Reshad F

Reshad F

06/03/2012 09:19:27
Quote Anchor link
Je kan dit toch met php controleren?
 
Obelix Idefix

Obelix Idefix

06/03/2012 09:31:15
Quote Anchor link
Met php controleren of javascript uit staat?
 
Jan terhuijzen

jan terhuijzen

06/03/2012 10:52:24
Quote Anchor link
Dankje Kris Peeters, hier heb ik wat aan. Het werkt.
 
Reshad F

Reshad F

06/03/2012 13:46:03
Quote Anchor link
@obelix nee controleren of de html tag de class JS heeft of niet
 
Kris Peeters

Kris Peeters

06/03/2012 15:19:17
Quote Anchor link
Javascript is een proces* dat draait op de pc van de gebruiker.
De server heeft geen weet van wat javascript allemaal uitspookt bij de gebruiker.

Als de gebruiker een formulier post (klassieke methode), worden slechts een aantal gegevens naar de server gestuurd.
basically worden gegevens (van <input>, van <textarea>, ...) in aan array gezet, $array[name] = value. // sommige elementen reageren anders

Die array krijgt php ter beschikking, in $_POST

Alle andere dingen die gebeuren bij de gebruiker ... worden niet teruggekoppeld naar de server. De server weet daar niets van.
De gebruiker mag op dit moment de ethernetkabel uittrekken, zijn wireless afzetten, ... Javascript blijft functioneren.

De class van een HTML element zal je nooit terugvinden in een $_POST; noch elders.


Bij een Ajax-request open je een communicatielijn tussen javascript en de server. Ook hier zal er slechts beperkte communicatie zijn.
javascript zal slechts cunnuniceren via een URL en verder GET en POST variabelen (die GET-variabelen zitten in de url).
Ook hier dus zal javascript de server niet laten weten wat er allemaal gebeurd is met classes van HTML-elementen.

Als je wil zorgen dat php weet dat het verzoek een Ajax-verzoek is, doe je wat ik toonde.
Als je wil dat javascript zelf duidelijk maakt aan de server dat het een Ajax-verzoek uitvoert, moet je dat doen via een extra GET of POST variabele.

( * afhankelijk van de webbrowser ... hoe dat precies zit, moet je maar aan anderen vragen)
Gewijzigd op 06/03/2012 15:32:07 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.