I have an HTML form and send data to php file when hitting submit button.
$.ajax({
url: \"text.php\",
type: \"POST\",
data: {
amount: amount,
You cannot directly insert a JSON object to a dom. JSON object toString()
method will always give u [object object], that is why you are getting this. You ve to parse the data by using
JSON.stringify(data)
or you have to run $.each(data,function(val){ $("#result").append(val) })
.
Code example with JSON.stringify:
<html>
<head>
<title>jQuery Test</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$("#submit").click(function(){
$.ajax({
url: "text.php",
type: "POST",
data: {
amount: $("#amount").val(),
firstName: $("#firstName").val(),
lastName: $("#lastName").val(),
email: $("#email").val()
},
dataType: "JSON",
success: function (jsonStr) {
$("#result").text(JSON.stringify(jsonStr));
}
});
});
});
</script>
</head>
<body>
<div id="result"></div>
<form name="contact" id="contact" method="post">
Amount: <input type="text" name="amount" id="amount"/><br/>
firstName: <input type="text" name="firstName" id="firstName"/><br/>
lastName: <input type="text" name="lastName" id="lastName"/><br/>
email: <input type="text" name="email" id="email"/><br/>
<input type="button" value="Get It!" name="submit" id="submit"/>
</form>
</body>
</html>
<?php
$amount = $_POST["amount"];
$firstName = $_POST["firstName"];
$lastName = $_POST["lastName"];
$email = $_POST["email"];
if(isset($amount)){
$data = array(
"amount" => $amount,
"firstName" => $firstName,
"lastName" => $lastName,
"email" => $email
);
echo json_encode($data);
}
?>
Your object is most likely being passed properly. It's the way you're capturing the result that returns [object object]
as @Spudley explained. The console doesn't know how to display the construct but you can display specific attributes using the object.attribute
syntax. Use console.log()
on the JS side or the code below for a prettified output.
// Indent with tabs
// Data is the parameter sent to the success function in the ajax handler
JSON.stringify( data , null, '\t');
From How can I pretty-print JSON in (unix) shell script?
Also Temporarily remove dataType
on the ajax handler if you sense there's a bug somewhere. Getting the ouput to show on a GET request should do. Change this back to POST for any operation that modifies something like a database delete or alter.
Lastly, modify the header as shown in @GroovyCarrot's answer. If you're using Chrome the extra whitespace seems to be a bug: Tab and pre wrapped around JSON output in Chrome
Try adding
header('Content-type: application/json');
At the top of your PHP script and see what you get back
Hope that helps!
Edit: Forgot to mention you should access your values like so: data.amount
You're converting resulting object to string instead of displaying it.
Instead of result, if you want print object inside some wrapper, you can do something like this:
var text = '{';
for(var i in data) {
var value = data[i];
text += '"'+i+'":"'+value+'", ';
}
text += '}';
$('#result').text(text);
But you may consider that console.log
is much easier and faster way to see the response in json format.