¿Cómo codifico JSON en PHP a través de datos de publicación jQuery Ajax?

Tengo un formulario HTML y envío datos al file php cuando presiono el button Enviar.

$.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); } }); 

En 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); } ?> 

El resultado es [object object]. Quiero un tipo como:

 {"Amount":"12.34", "FirstName":"Any", "LastName":"Tester", "Email":"a.test@something.com"} 

¿Qué he hecho mal?

Ejemplo de código con 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); } ?> 

Es muy probable que su object se haya pasado correctamente. Es la forma en que está capturando el resultado que devuelve [object object] como @Spudley explicó. La console no sabe cómo mostrar el constructo pero puede mostrar attributes específicos utilizando la syntax object.attribute . Use console.log() en el lado JS o en el siguiente código para una salida embellecida.

 // Indent with tabs // Data is the parameter sent to the success function in the ajax handler JSON.stringify( data , null, '\t'); 

Desde ¿Cómo puedo imprimir bastante JSON en un guión de shell (unix)?

También elimine temporalmente dataType en el controller ajax si detecta que hay un error en alguna parte. Obtener la salida para mostrar en una request GET debería hacer. Cambie esto a POST para cualquier operación que modifique algo como una database eliminar o alterar.

Por último, modifique el encabezado como se muestra en la respuesta de @ GroovyCarrot. Si usas Chrome, el espacio en blanco adicional parece ser un error: Tab y pre envuelto alnetworkingedor de la salida JSON en Chrome

Prueba agregar

 header('Content-type: application/json'); 

En la parte superior de tu script PHP y mira lo que obtienes

¡Espero que ayude!

Editar: Olvidé mencionar que debe acceder a sus valores de la siguiente manera: data.amount

No puede insert directamente un object JSON en un dom. El método JSON toString() siempre te dará u [object object], es por eso que lo estás obteniendo. Debes analizar los datos usando JSON.stringify(data) o tienes que ejecutar $.each(data,function(val){ $("#result").append(val) }) .

Está convirtiendo el object resultante en cadena en lugar de mostrarlo.

En lugar de resultado, si desea imprimir el object dentro de un contenedor, puede hacer algo como esto:

 var text = '{'; for(var i in data) { var value = data[i]; text += '"'+i+'":"'+value+'", '; } text += '}'; $('#result').text(text); 

Pero puede considerar que console.log es una forma mucho más fácil y rápida de ver la respuesta en formatting json.