Here I have a simple form:
<form class="form" id="loginForm">
<div class="form-group">
<label for="affiliate">Affiliate</label>
<select class="form-control" id="affiliate" name="affiliate">
{{#list locations}}{{name}}{{/list}}
</select>
</div>
<div class="form-group">
<label for="uname">Username</label>
<input type="text" class="form-control" name="uname" id="uname">
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password">
</div>
<button type="submit" class="btn btn-lg float-right" id="btnLogin">Login</button>
</form>
Then I prevent the default action from happening by:
$('form').submit(function(event) {
event.preventDefault();
//attempt to log in to the system
attemptLogin(event)
});
Inside the attemptLogin method
function attemptLogin(form){
//convert our form data to an array, then convert that array to JSON
var formData = JSON.stringify($('#loginForm').serializeArray());
//url for login, in future should be grabbed from action of form
var url = "http://www.rsbmat.com/api/login.php";
//debug statement
console.log(formData);
//make an ajax call to the server
$.ajax({
//sent header information with ajax call, so app and server know that information can be sent back
header: {'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': "Content-Type, Origin, Accept, X-Requested-With"},
//method to send data to server
method: "POST",
//url the data will be sent
url: url,
cache: false,
//data we are sending
data: formData,
//allow cross domain
crossDomain: true,
//type of content going to be sent
contentType: "application/json",
//type of data we are receiving
dataType: "json",
//this is called BEFORE the ajax call is sent
beforeSend: function(xhr){
xhr.withCredentials = true;
}
//when it's finished what do we do with data sent back
}).done(function(data){
console.log(data);
});
}
And on the PHP side, I've tried print_r, echo, var dump and json_encode of the POST array, however it's always empty. The form data is not being sent. Before I send the ajax request, I print the json data to make sure it is indeed there:
[{"name":"affiliate","value":"South King County"},{"name":"uname","value":"testuser"},{"name":"password","value":"testpassword"}]
And the data is there however, the information received from the server is still empty.
<?php
header("Content-Type: application/json", true);
require_once("../../db.php");
//echo $_POST;
//print_r($_POST);
echo json_encode($_POST);
//var_dump(json_decode(file_get_contents("php://input")));
I have everything commented out to just get the POST to print.. It does echo back to the app, I can see it in console.log, however it is empty.
login.php? Also, check the network log in the browser and see if the data is sent.JSON.stringifyjust useserializeArray()orserialize().serialize()and leavecontentTypeas default which is form encode