Alert not working in Ajax Success Function - javascript

I have a problem that I get the data from contact us form and send it to PHP file via ajax to send an email for the person who submits but I need to display a verification message to him on the site and the alert or any code in the success function doesn't work although the email goes through
here is My Function
function SendMail(){
// document.getElementById("loading").style.display = "block";
var name = document.getElementById("name").value;
var email = document.getElementById("email").value;
var subject = document.getElementById("subject").value;
var message = document.getElementById("message").value;
var Sent = false;
$.ajax({
url:"SendMail.php",
type:"post",
dataType: "json",
data: {type: "contact",name : name , email: email, subject: subject , message : message},
success : function(data){
alert("We Recieved Your Message and will get back as soon as possible");
}
});
}

Related

How to make an AJAX call with jQuery?

I'm dealing with the project where I need to collect data from user and display on the same page. I've successfully completed the Ajax call using JavaScript, but now I want using Jquery.
This is my JavaScript Code:
var output1 = document.getElementById("output1");
function saveUserInfo() {
var userName = document.getElementById('username').value;
var password = document.getElementById('password').value;
var firstName = document.getElementById('firstname').value;
var lastName = document.getElementById('lastname').value;
var email = document.getElementById('email').value;
var dob = document.getElementById('datepicker').value;
var vars = "username=" + userName + "&password=" + password + "&firstname=" + firstName + "&lastname=" + lastName + "&email=" + email + "&datepicker=" + dob;
var ajax = new XMLHttpRequest();
var url = 'register.jsp';
ajax.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
output1.innerHTML = (ajax.responseText);
}
}
ajax.open("POST", url, true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.send(vars);
}
This is my register.jsp :
<%# page import ="java.sql.*" %>
<%# page import ="javax.sql.*" %>
<%
String user = request.getParameter("username");
session.putValue("username",user);
String pwd = request.getParameter("password");
String fname = request.getParameter("firstname");
String lname = request.getParameter("lastname");
String email = request.getParameter("email");
String dob = request.getParameter("dob");
Class.forName("com.mysql.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_info2","root","root");
Statement st = con.createStatement();
ResultSet rs;
//int i=st.executeUpdate("insert into user_info value('"+user+"','"+pwd+"','"+fname+"','"+lname+"','"+email+"')");
int i=st.executeUpdate("INSERT INTO `users`(user,pwd,fname,lname,email,dob) VALUE ('"+user+"','"+pwd+"','"+fname+"','"+lname+"','"+email+"','"+dob+"')");
%>
Registration is Successfull. Welcome <%=user %>,
Your Password is : <%=pwd %>,
FirstName : <%=fname %>,
LastName : <%=lname %>,
Email : <%=email %>,
and Date Of Birth is : <%=dob %>,
This is a generalized view of a jQuery ajax request.
$.ajax({
url: 'register.jsp',
type: 'POST',
data : {userName : userName,password: password,....},
contentType: 'yourConentType', // ConentType that your are sending. No contentType needed if you just posting as query string parameters.
success: function(response){
// do whatever you want with response
},
error: function(error){
console.log(error)
}
});
If you want to pass your values as object then as follows:
var formData = {userName : userName, password: password,...};
$.ajax({
url: 'register.jsp',
type: 'POST',
data : JSON.stringify(formData),
contentType: 'application/json',
success: function(response){
// do whatever you want with response
},
error: function(error){
console.log(error)
}
});
For more details: jQuery.ajax()
function saveUserInfo() {
var postData = {
username: $('#userName').val(),
password: $('#firstname').val(),
firstName: $('#ss_unit').val(),
lastName: $('#lastname').val(),
email: $('#email').val(),
dob: $('#datepicker').val()
};
$.post(url, postData).done(function(data) {
output1.innerHTML = data;
});
}
$.ajax({
type: "POST",
url: url,
data: data,
dataType: dataType
}).done(function(){
}).fail(function(){
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
You can use jQuery's $.post method with .fail and .done. Then you can also use query's selectors to get the values from all your inputs.
Something like the following:
var output1 = $("#output1");
function saveUserInfo() {
var userName = $('#username').val();
var password = $('#password').val();
var firstName = $('#firstname').val();
var lastName = $('#lastname').val();
var email = $('#email').val();
var dob = $('#datepicker').val();
var data = {userName, passWord, firstName, lastName, email, dob};
var url = 'register.jsp';
$.post(url, data)
.done(function(msg) { /* yay it worked */ });
.fail(function(xhr, status, err) {
output1.text(err);
});
}
I also noticed that you are getting many input fields in your code. If all these input fields are located in a form (for instance with the id of formId, you can use $('#formId').serialize() to create the vars string for you. You can read more about .serialize() here.
You can use ajax call of jquery by using following syntax.
Add this on head section of your page for jquery reference.
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
For JS:
function saveUserInfo() {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: "...", // your api or url for fetching data
data: "..", // your data coming from front end in json
dataType: "json",
success: function (data) {
// your action need to perform
},
error: function (result) {
// handle error
}
});
}
However it is not recommended to make your connection or database related information provide on client side. For fetching data from backend it is recommended to make an API or web service for that.
You can use following links for references.
WebService: https://www.c-sharpcorner.com/UploadFile/00a8b7/web-service/
WebAPI: https://www.tutorialsteacher.com/webapi/create-web-api-project
Note: These both are for C# backend. Please mention your language name if anything else you are using.
It is the jQuery syntax of your code
function saveUserInfo() {
var userName = $('username').val();
var password = $('password').val;
var firstName = $('firstname').val;
var lastName = $('lastname').val;
var email =$('email').val;
var dob = $('datepicker').val;
var vars = {'userName':userName ,'password':password ,'firstName':firstName ,'lastName':firstName ,'email':email ,'datepicker':dob }
$.ajax(
{
url:'register.jsp',
data:vars ,
type:'POST'
dataType : "json",
contentType: "application/json; charset=utf-8",
success:function(result)
{
code to use result here
}
});
}

fetching user details on successful login

I don't have hands on the API. I am using the provided URL to check the validity of a user based on its email. If the email and password match the data already present in API, I need to display them. I tried the part that has been commented now. Can someone help me?
$('#checkbutton').on('click',function(){
var self = this;
// var data={
// email: $('#emailer').val(),
// txtpaswrd: $('#paswrder').val()
// }
// var resultElement = $('#resultDiv');
var email = $('#emailer').val();
var txtpaswrd = $('#paswrder').val();
$.ajax({
type: "GET",
data: data,
processData:false,
contentType:false,
dataType:"json",
url: 'http://13.229.164.32/users/user_check.json?email=' + email,
success: function(nData){
alert(nData.password);
alert(nData.email);
if(email == nData.email && txtpaswrd == nData.password ){
//window.location = 'http://13.229.164.32/users.json';
}else{
alert('Password Error');
}
}
});
});
Try this:
$('#checkbutton').on('click', function() {
var email = $('#emailer').val();
var password = $('#paswrder').val();
var $resultElement = $('#resultDiv');
var URL = 'http://13.229.164.32/users/user_check.json?email=' + email;
$.getJSON(URL, response => {
var result = reponse.password == password ? "Password is a match." : "Passwords don't match.";
$resultElement.html(result)
});
});

ajax get key values?

Trying to do a GET on the values entered for some text fields but when console logging data ( i thought defined in the ajax) it just returns my whole page html.
<script>
/*<![CDATA[*/
$(document).ready(function() {
var submit = document.getElementById("submit");
var firstName = $("#firstName").val();
var LastName = $("#LastName").val();
var Phone = $("#Phone").val();
var Party = $("#Party").val();
var dateof = $("#dateof").val();
var Timeof = $("#Timeof").val();
submit.onclick = function(){
$.ajax({
type: "GET",
url: "reserve.html",
data: firstName, LastName, Phone, Party, dateof, Timeof,
cache: true,
success: function(data){
console.log(data);
}
});}})
;
/*]]>*/
</script>
I am also a bit lost as how to post the results to say a console.log (not setting up a server yet...) would I use ajax type post? how does this differ from get?
THANKS!

Send form data via email on submit

I have a form that submits data to parse.com using the code below:
<script>
function validateForm() {
Parse.initialize("xxxx", "xxxxxx");
var TestObject = Parse.Object.extend("Event");
var testObject = new TestObject();
testObject.save({
Name: document.forms["myForm"]["fname"].value,
Date: document.forms["myForm"]["date"].value,
success: function(object) {
$(".success").show();
},
error: function(model, error) {
$(".error").show();
}
});
}
</script>
however I was wondering if there was a way that I could simultaneously send an email with the contents of the form. Is this possible?
You would need some type of server side script to send email.
If you use PHP, you could use the mail function.
In the JavaScript, you would just send an AJAX request to the server-side file containing the code that sends the email.
Yes you can, use AJAX to send it. Here's an example code:
JavaScript
var name = "Test";
var last_name = "Last Test";
$.ajax({
type:"POST",
url:"your_php_file.php",
data:{
name : name,
lastname : last_name
},
success:function(data){
// TODO when success
}
});
And your PHP file would look like:
$name = $_POST['name'];
$lastName = $_POST['lastname'];
Note i've used different last name's on purpose.
EDIT: Forgot to mention, once in PHP you can send email either by using mail, PHPMailer or whatever you wish

Javascript values not being assigned

I am having a problem getting values assigned for fname, lname and etc, these do not exist on the page until the success function is called and it posts to template/orderForm.php. if i for example console.log(fname) i get an empty field.
The first thing that happens is on login button submit it checks the information against the database via phpscripts/login.php, on success of that it posts to another page to get form data, such as their name and etc which are auto-populated with php echos.
$("#loginSubmit").click(function() {
var username = $("#username").val();
var password = $("#password").val();
$.ajax({
type: "POST",
url: "phpscripts/login.php",
dataType: 'text',
data: {
username: username,
password: password
},
success: function(data){
if(data == 'worked') {
$("#loginForm").hide(500);
$("#loginBtn").hide(500);
$("#registerBtn").hide(500);
$("#forgotPasswordBtn").hide(500);
$.post('template/orderForm.php', function(data) {
$('#approveData').html(data);
$("#updateInfo").click(function() {
var fname = $('#fname').attr('value');
var lname = $('#lname').attr('value');
var address = $('#address').attr('value');
var city = $('#city').attr('value');
var state = $('#state').attr('value');
var zip = $('#zip').attr('value');
var phone = $('#phone').attr('value');
console.log(fname);
$.ajax({
type: "POST",
//change to update script that is in myaccount.php
url: "phpscripts/update.php",
data: {
fname: fname,
lname: lname,
address: address,
city: city,
state: state,
zip: zip,
phone: phone
},
success: function(){
//do nothing
}
});
});
});
}
else {
}
}
});
});
Try $('#fname').val() instead of $('#fname').attr('value'), and same with others.
I don't know what's going on with your HTML so here's my guess:
This line:
$('#approveData').html(data);
contains your html which houses the element with an id of fname.
This js:
$("#updateInfo").click(function() { ... });
should be this:
$("#updateInfo").live('click', function() { ... });
And be outside in a ready statement or something. Not defined within the results of another listener.
This link explains .live:
http://api.jquery.com/live/
It registers newly inserted dom elements where as your basic listener you provided will not IF the fname element is written in by your request - an assumption, so don't yell if I am wrong here.

Categories