Ajax insert werkt niet
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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>
<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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$("#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('');
});
}
$.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('');
});
}
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?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";
?>
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:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
$("#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('');
});
}
(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('');
});
}
Gewijzigd op 06/03/2014 12:10:55 door Snelle Jaap
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?
Gewijzigd op 06/03/2014 12:02:36 door Michael -
Toevoeging op 06/03/2014 13:02:21:
?
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.
Nee of het een submit is maakt niet uit.
Probeer eens alleen
Code (php)
1
2
3
2
3
$("#sub").click( function(event) {
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
});
(event.preventDefault) ? event.preventDefault() : event.returnValue = false;
});
en anders eens (denk niet dat t uitmaakt)
Dat werkt ook niet, vreemd, het form zou niet gesubmit moeten worden dan lijkt me. Alsnog wordt de pagina ververst en de query uitgevoerd.
Code (php)
1
2
3
4
5
2
3
4
5
$( document ).ready(function() {
// Hier al je eigen gemaakt JS-functies met jQuery
// hier al je JS code met jQuery
});
// Hier al je eigen gemaakt JS-functies met jQuery
// hier al je JS code met jQuery
});
Verder zie ik wel SQL-injection:
Dus escape $name en $age even met mysql_real_escape_string()
Gewijzigd op 06/03/2014 13:27:32 door - Ariën -
Die code is inderdaad wel handig ja, hij werkt nu. En ik heb totaal niet gelet op veiligheidsfoutjes, moest alleen weer even weten hoe Ajax in elkaar stak. Thanks
Scherp Aar, lijkt er inderdaad op dat de javascript code wordt gelezen voor de html elementen bestaan en dan is de hele javascript code nutteloos, want die wordt niet aan elementen gehangen.
Haha top Aar ;) In ieder geval nog één wakker.
/me deelt een paar bakjes koffie uit.
Maar ik geef eerlijk toe. Mij is dit ook wel eens overkomen, dat ik die $( document ).ready(function() { vergat. Of een stel functies met jQuery VOOR je ready aan het uitvoeren was, die uiteraard niet werkten.
Maar ik geef eerlijk toe. Mij is dit ook wel eens overkomen, dat ik die $( document ).ready(function() { vergat. Of een stel functies met jQuery VOOR je ready aan het uitvoeren was, die uiteraard niet werkten.
Gewijzigd op 06/03/2014 13:50:52 door - Ariën -
Bedankt voor de koffie! Is inderdaad iets om makkelijk te vergeten :)