如何通过jQuery Ajax发布数据在PHP中对JSON进行编码?
我有一个HTML表单,并在点击提交按钮时将数据发送到php文件。
$.ajax({
url: "text.php",
type: "POST",
data: {
amount: amount,
firstName: firstName,
lastName: lastName,
email: email
},
dataType: "JSON",
success: function (data) {
console.log("ok");
$("#result").text(data);
}
});
在PHP中:
<?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);
}
?>
结果是[object object]。 我想要一个类似于:
{"Amount":"12.34", "FirstName":"Any", "LastName":"Tester", "Email":"a.test@something.com"}
我做错了什么?
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>
text.php
<?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);
}
?>
你的对象很可能被正确传递。 正如@Spudley解释的那样,您捕获返回[object object]
的结果的方式。 控制台不知道如何显示构造,但可以使用object.attribute
语法显示特定的属性。 使用JS端的console.log()
或下面的代码来获得精确输出。
// Indent with tabs
// Data is the parameter sent to the success function in the ajax handler
JSON.stringify( data , null, 't');
从我如何在(unix)shell脚本中漂亮地打印JSON?
如果你觉得某处存在bug,也暂时删除ajax处理程序中的dataType
。 获取输出以显示GET请求应该这样做。 将其更改回POST以进行任何修改类似于数据库删除或更改的操作。
最后,修改标题,如@ GroovyCarrot的答案中所示。 如果你使用的是Chrome,那么额外的空白似乎就是一个bug:在Chrome中,Tab和Pre包裹着JSON输出
尝试添加
header('Content-type: application/json');
在你的PHP脚本的顶部,看看你回来了什么
希望有所帮助!
编辑:忘了提及你应该访问你的值,如: data.amount