Ajax Form Submit Not Working in PHP – Solved

I have a file called try.php that combines all the JavaScript, PHP, and HTML code in one place to handle an AJAX form submission without reloading the page. However, I noticed that despite using AJAX, the page is still reloading.

After reviewing the code, I identified two main errors:

  1. JavaScript Variable Naming Mismatch: When serializing the form data, I named the variable form_Data. But, in the AJAX call, I accidentally referenced it as form_data (with a lowercase “d”). JavaScript is case-sensitive, so this mismatch means that AJAX is sending undefined instead of the form data. The solution is to make sure the variable name is consistent — either all form_Data or form_data — to avoid this error.
  2. Unnecessary window.history.back() Line: I included window.history.back(); in my AJAX function, which causes the browser to navigate back in history. This is unnecessary and interferes with the AJAX submission by forcing the page to reload. Removing this line fixes the problem and lets AJAX work as intended.

Error Code:

code<?php

if (isset($_POST["submit"])) {
echo "hello";
}

?>
<!DOCTYPE html>
<html>
<head>
<title>Submit Form Using AJAX and jQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<form method="POST" id="myForm">
<input name="name" type="text" placeholder="Your Name">
<input name="email" type="text" placeholder="email">
<input name="submit" type="submit" value="Submit">
<div id="display"></div>
</form>
<script>
$(document).ready(function(){
$("#myForm").submit(function(event) {
event.preventDefault(); //prevent default action
window.history.back();
var form_Data = $(this).serialize();

$.ajax({
type: "POST",
url: "try.php",
data: form_data,
cache: false,
success:function(response){
alert(response);
}
});
});
});

</script>
</body>
</html>

The code provided contains two issues that need to be addressed for the AJAX form submission to work without reloading the page. Here’s the solution, the corrected code, and an explanation of each fix.

Corrected Code:

code<?php

if (isset($_POST["submit"])) {
echo "hello";
}

?>
<!DOCTYPE html>
<html>
<head>
<title>Submit Form Using AJAX and jQuery</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
<form method="POST" id="myForm">
<input name="name" type="text" placeholder="Your Name">
<input name="email" type="text" placeholder="email">
<input name="submit" type="submit" value="Submit">
<div id="display"></div>
</form>
<script>
$(document).ready(function(){
$("#myForm").submit(function(event) {
event.preventDefault(); // Prevents page reload

var form_Data = $(this).serialize(); // Fixed variable name for consistency

$.ajax({
type: "POST",
url: "try.php",
data: form_Data, // Using the correct variable name
cache: false,
success: function(response){
alert(response); // Displays the response from PHP
}
});
});
});
</script>
</body>
</html>

Explanation of Changes:

  1. Corrected Variable Name: In the original code, the serialized form data was assigned to a variable named form_Data, but in the data field of the AJAX request, it was referenced as form_data (with a lowercase “d”). JavaScript is case-sensitive, so this mismatch resulted in an undefined variable. By ensuring the variable name is consistently form_Data in both places, the data now gets passed correctly to the server.
  2. Removed window.history.back(): The window.history.back(); line was causing the browser to go back in the navigation history, which interrupted the AJAX process by causing an unexpected page reload. Removing this line allows the form to submit via AJAX without any reloading or navigation issues.

Final Thought

By making these small adjustments, the AJAX request now successfully sends the form data to try.php without reloading the page, and the PHP file responds with “hello” as expected. This approach achieves the desired functionality of submitting the form data asynchronously using AJAX, providing a smooth user experience.

Related blog posts