How do I encode JSON in PHP via jQuery Ajax post data?
我有一个HTML表单,并在点击提交按钮时将数据发送到PHP文件。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $.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中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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); } ?> |
结果是[对象对象]。我想要一个像这样的类型:
1 |
我做错了什么?
使用json.stringify的代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <html> <head> jQuery Test <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.js"> <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)); } }); }); }); </head> <body> <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> |
文本文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?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所解释的那样,您捕获结果的方式返回
1 2 3 | // Indent with tabs // Data is the parameter sent to the success function in the ajax handler JSON.stringify( data , null, '\t'); |
如何在(unix)shell脚本中漂亮地打印JSON?
如果您发现某个地方有错误,还可以临时删除Ajax处理程序上的
最后,修改头部,如@groovycarot's answer所示。如果您使用的是chrome,那么额外的空白空间似乎是一个bug:tab,并在chrome中预先包装了JSON输出。
尝试添加
1 | header('Content-type: application/json'); |
在你的PHP脚本的顶部,看看你能得到什么。
希望有帮助!
编辑:忘记提到你应该访问你的值,比如:
不能将JSON对象直接插入到DOM中。JSON对象
您正在将结果对象转换为字符串,而不是显示它。
如果希望打印对象位于某个包装器中,则可以执行以下操作,而不是结果:
1 2 3 4 5 6 7 8 9 10 11 | var text = '{'; for(var i in data) { var value = data[i]; text += '"'+i+'":"'+value+'", '; } text += '}'; $('#result').text(text); |
但您可能会认为,以JSON格式查看响应的方法