Morge,

Ik heb Ajax weer even nodig, is weer een tijd terug dat ik het heb gebruikt, dus ik dacht ik doe even een tutorial. Maar ik krijg hem niet werkend, alles insert maar hij blijft verversen.

Ja ik weet dat het mysql is, PDO/mysqli is beter etc etc, maar dat komt allemaal later wel, ik wil eerst even ophelderen hoe dat Ajax werkt.


index.php
<html>
    <head>
        <script src="http://code.jquery.com/jquery-latest.js"></script>
        <script src="js/script.js"></script>
    </head>
    <body>
        <form id="myForm" action="action1.php" method="post">
        Name: <input type="text" name="name" /><br />
        Age : <input type="text" name="age" /><br />
        <button id="sub">Save</button>
        </form>
    </body>
</html>


script.js

$("#sub").click( function() {
 $.post( $("#myForm").attr("action"), 
         $("#myForm :input").serializeArray(), 
         function(info){ $("#result").html(info); 
   });
 clearInput();
});
 
$("#myForm").submit( function() {
  return false;	
});

function clearInput() {
	$("#myForm :input").each( function() {
	   $(this).val('');
	});
}


<?php
include_once('includes/connection.php');

$name = $_POST['name'];
$age = $_POST['age'];

if(mysql_query("INSERT INTO user VALUES('$name', '$age')"))
echo "Successfully Inserted";
else
echo "Insertion Failed";

?>

Aangepaste code na reactie:

$("#sub").click( function() {
 (event.preventDefault) ? event.preventDefault() : event.returnValue = false;
 $.post( $("#myForm").attr("action"), 
         $("#myForm :input").serializeArray(), 
         function(info){ $("#result").html(info); 
   });
 clearInput();
});

function clearInput() {
	$("#myForm :input").each( function() {
	   $(this).val('');
	});
}
Met verversen bedoel je dat het formulier gepost wordt?
hiervoor de volgende regel in je click function plaatsen en event meesturen

(event.preventDefault) ? event.preventDefault() : event.returnValue = false;

regel 9-11 kunnen dan weg.
Ik wil wel dat het formulier gepost wordt (insert in de database) maar niet dat hij ververst, vandaar dat ik Ajax nodig heb.
Ja dat doe je met $.post zoals je nu hebt,maar daarom moet je wel voorkomen dat de post request door je browser wordt uitgevoerd. Dat kan dus met preventDefault()
Hij refresht hem alsnog, ligt dat niet aan die knop ofzo?
Bugje waarschijnlijk. Wat zegt de console log? Wat als je wat delen van de code even weg haalt? Wat heb je nu?
Ik heb de code aangepast zoals in je vorige post (heb hem nog even in de post gezet onderaan), de consolelog zegt niks (ik gebruik chrome logger)

Toevoeging op 06/03/2014 13:02:21:

?
In jquery kan je dat veel eenvoudiger oplossen volgens mij. De meeste events geven het event object mee in de handler aanroep. Op dat object kan je de prevent default aanroepen.
[code lang=js]
$("#sub").click( function(e) {
e.preventDefault();
$.post( $("#myForm").attr("action"),
$("#myForm :input").serializeArray(),
function(info){ $("#result").html(info);
});
clearInput();
});
[/code]
Bedankt, maar hij blijft hem nog steeds refreshen, heeft dat er niet mee te maken dat hij de knop ziet als een submit? Moet dat niet worden input type="button"?
Nee. Omdat je de preventDefault aanroept gaat het event niet verder naar het form, ongeacht wat voor type button. Alleen als jij in code het form nog een keer submit, dan gebeurt dat wel. In je originele code had je dat staan, als het form nu nog steeds submit lijkt me dat dat ergens is achtergebleven.
in de function moet je inderdaad event nog mee geven zoals Erwin aangeeft.
Nee of het een submit is maakt niet uit.

Probeer eens alleen

$("#sub").click( function(event) {
 (event.preventDefault) ? event.preventDefault() : event.returnValue = false;
});


en anders eens (denk niet dat t uitmaakt)

$("#sub").on('click', function(event) {
 (event.preventDefault) ? event.preventDefault() : event.returnValue = false;
});

Reageren