Ik heb de volgende code:


<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function SubmitForm() {
var content = $("#content").val();
var naam = $("#naam").val();
$.post("shared/saveItem.php", { content: content, naam: naam },
   function(data) {
     alert("Data Loaded: " + data);
   });
}
</script>


En ik wil in plaats van de alert de volgende div weergeven:


        <div id="opslaan">
        <div class="alert alert-success alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true">×</button>
                    <h4>	<i class="icon fa fa-check"></i>Opgeslagen!</h4>
                    Het onderwerp is succesvol opgeslagen.
        </div>
        </div>


Hoe krijg ik dat voor elkaar?
ipv:
alert("Data Loaded: " + data);


doe je:
$( "#opslaan" ).show();
Heel raar, maar er gebeurt niks... Is er iets fout aan de code?
Ik heb het volgende, maar er gebeurt niks:
Heb ik iets fout gedaan?


<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function SubmitForm() {
var content = $("#content").val();
var naam = $("#naam").val();
$.post("shared/saveItem.php", { content: content, naam: naam },
   function(data) {
     $( "#opslaan" ).show();
   });
}
</script>

        <div id="opslaan">
        <div class="alert alert-success alert-dismissable">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
                    <h4>    <i class="icon fa fa-check"></i>Opgeslagen!</h4>
                    Het onderwerp is succesvol opgeslagen.
        </div>
        </div>
Is dit je hele code? Want je start jQuery niet op door te controleren of de pagina geladen is.
- Ariën - op 03/02/2016 22:05:52

Is dit je hele code? Want je start jQuery niet op door te controleren of de pagina geladen is.


Het ligt er maar net aan waar de code staat. Als de code voor de </body> tag staat is dat niet nodig. Verkeerd gelezen..

@TS:
Wordt de data wel opgeslagen?
Ja, de data wordt opgeslagen en ik ben misschien iets dichterbij....

De volgende code werkt namelijk wel:

<script>
setTimeout(function(){
	document.getElementById('opslaan').innerHTML = '';
}, 3000);
</script>


Kan ik dat op een of andere manier combineren met het volgende?

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function SubmitForm() {
var content = $("#content").val();
var naam = $("#naam").val();
$.post("shared/saveItem.php", { content: content, naam: naam },
   function(data) {
     $( "#opslaan" ).show();
   });
}
</script>
Wanneer en hoe wordt SubmitForm() aangeroepen? Als je een formulier submit? Dit default gedrag moet je dan afvangen indien je via AJAX deze data wil POSTen, anders wordt je formulier gewoon gesubmit en dat resulteert in het (her)laden van een (mogelijk andere) pagina.

Je kunt beter een onsubmit listener aan een formulier hangen...
SubmitForm() wordt opgeroepen bij het submitten van een formulier:


<p><input type="button" onclick="SubmitForm();" name="save" class="btn btn-primary" value="OPSLAAN"></p>


Hoe moet ik dat veranderen dan, Thomas? Ik snap niet precies wat je bedoelt...
formulier:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>show dialog after post</title>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
<form id="theForm">
<p><label for="naam">naam</label><input type="text" name="naam" id="naam"></p>
<p><label for="content">content</label><textarea name="content" id="content"></textarea></p>
<div>
    <button type="submit">verzenden</button>
</div>
</form>

<div id="postResult" style="display: none;"></div>
<script type="text/javascript">
//<![CDATA[
// als je document klaar is met laden...
$().ready(function() {
    // als het formulier #theForm wordt gesubmit...
    $('form#theForm').submit(function(e) {
        // vang het submit event af, jQuery/AJAX handelt dit immers af
        e.preventDefault(); // het default gedrag is dat het formulier gePOST wordt, en dat willen we niet
        $('#postResult').hide();
        $.post(
            'post.php', // het script waar je naartoe POST
            $('#theForm').serialize(), // verzamel alle form data in 1x (naam, content)
            function(ok) { // callback functie die wordt uitgevoerd na terugontvangen (JSON) resultaat
                if (ok) {
                    $('#postResult').css('background-color', '#ccffcc').text('Success! :)');
                } else {
                    // doe ook iets voor als het misgaat...
                    $('#postResult').css('background-color', '#ffcccc').text('Fail! :(');
                }
                $('#postResult').show();
            }, // einde callback functie
            'json' // geef een "hint" over het type van de terug te ontvangen data
        );
    });
});
//]]>
</script>
</body>
</html>

post.php (het script dat de AJAX POST verwerkt):
<?php
// Declareer Content-Type en character encoding van het resultaat.
header('Content-Type: application/json; charset=UTF-8');

$success = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // voer controles uit, verwerk formulier, wat mogelijk resulteert in
    // ...
    $success = true;
}
// Of wat voor informatie je allemaal terug wilt sturen, voor nu enkel een boolean (true of false)
echo json_encode($success);
?>
Hoi Thomas, super bedankt! Maar m'n formulier saved al wel... De melding krijg ik alleen niet te zien op deze manier:


<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
function SubmitForm() {
var content = $("#content").val();
var naam = $("#naam").val();
$.post("shared/saveItem.php", { content: content, naam: naam },
   function(data) {
     $( "#opslaan" ).show();
   });
}
</script>


Moet ik het dan toch helemaal ombouwen? Want in de <div id="opslaan"> staat alleen maar de melding: de gegevens zijn opgeslagen.
Dus ik hoef niks terug te roepen van een andere save-pagina.
Of begrijp ik je uitleg verkeerd?
Het punt is dus alleen dat de melding niet zichtbaar wordt. Het formulier saved wel keurig....

Reageren