He estado buscando la solución por todas partes, pero no puedo encontrar nada que funcione. Estoy tratando de obtener un montón de datos de la base de datos y luego a través de los campos de entrada de autocompletar de AJAX en un formulario. Para ello he decidido utilizar json, porque ¿por qué no, verdad? Alternativamente, he estado pensando en enviar una cadena delimitada y luego tokenizarla, lo que en retrospectiva hubiera sido mucho más fácil y me hubiera ahorrado el dolor de cabeza... Sin embargo, como decidí usar json, supongo que debe seguir con él y averiguar lo que salió mal! Lo que sucede es que cuando se ejecuta get_member_function(), aparece un error en un diálogo de alerta y dice "[objeto Objeto]". Intenté esto también usando la solicitud GET y configurando contentType en ”application/json; juego de caracteres=utf-8″. Por desgracia, no hay dados. ¿Alguien puede sugerir qué estoy haciendo mal? Cuídate, Piotr.
Mi función javascript/jQuery es la siguiente:
function get_member_info() { var url = "contents/php_scripts/admin_scripts.php"; var id = $( "select[ name = member ] option:selected" ).val(); $.ajax( { type: "POST", dataType: "json", url: url, data: { get_member: id }, success: function( response ) { $( "input[ name = type ]:eq( " + response.type + " )" ).attr( "checked", "checked" ); $( "input[ name = name ]" ).val( response.name ); $( "input[ name = fname ]" ).val( response.fname ); $( "input[ name = lname ]" ).val( response.lname ); $( "input[ name = email ]" ).val( response.email ); $( "input[ name = phone ]" ).val( response.phone ); $( "input[ name = website ]" ).val( response.website ); $( "#admin_member_img" ).attr( "src", "images/member_images/" + response.image ); }, error: function( error ) { alert( error ); } } ); }y el código relevante en "contents/php_scripts/admin_scripts.php" es el siguiente:
if( isset( $_POST[ "get_member" ] ) ) { $member_id = $_POST[ "get_member" ]; $query = "select * from members where id = '$member_id'"; $result = mysql_query( $query ); $row = mysql_fetch_array( $result ); $type = $row[ "type" ]; $name = $row[ "name" ]; $fname = $row[ "fname" ]; $lname = $row[ "lname" ]; $email = $row[ "email" ]; $phone = $row[ "phone" ]; $website = $row[ "website" ]; $image = $row[ "image" ]; $json_arr = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image ); echo json_encode( $json_arr ); }Creo que conozco a este...
Intenta enviar tu JSON como JSON usando la función header() de PHP:
/** * Send as JSON */ header("Content-Type: application/json", true);Aunque está pasando JSON válido, $.ajax de jQuery no lo cree porque le falta el encabezado.
jQuery solía estar bien sin el encabezado, pero se cambió algunas versiones atrás.
ADEMÁS
Asegúrese de que su secuencia de comandos devuelva JSON válido. Use Firebug o las herramientas para desarrolladores de Google Chrome para verificar la respuesta de la solicitud en la consola.
ACTUALIZAR
También querrá actualizar su código para desinfectar el $_POST para evitar ataques de inyección de sql. Además de proporcionar algunos errores de captura.
if (isset($_POST['get_member'])) { $member_id = mysql_real_escape_string ($_POST["get_member"]); $query = "SELECT * FROM `members` WHERE `id` = '" . $member_id . "';"; if ($result = mysql_query( $query )) { $row = mysql_fetch_array($result); $type = $row['type']; $name = $row['name']; $fname = $row['fname']; $lname = $row['lname']; $email = $row['email']; $phone = $row['phone']; $website = $row['website']; $image = $row['image']; /* JSON Row */ $json = array( "type" => $type, "name" => $name, "fname" => $fname, "lname" => $lname, "email" => $email, "phone" => $phone, "website" => $website, "image" => $image ); } else { /* Your Query Failed, use mysql_error to report why */ $json = array('error' => 'MySQL Query Error'); } /* Send as JSON */ header("Content-Type: application/json", true); /* Return JSON */ echo json_encode($json); /* Stop Execution */ exit; }Intente usar jQuery.parseJSON cuando recupere los datos.
type: "POST", dataType: "json", url: url, data: { get_member: id }, success: function(data) { response = jQuery.parseJSON(data); $("input[ name = type ]:eq(" + response.type + " )") .attr("checked", "checked"); $("input[ name = name ]").val( response.name); $("input[ name = fname ]").val( response.fname); $("input[ name = lname ]").val( response.lname); $("input[ name = email ]").val( response.email); $("input[ name = phone ]").val( response.phone); $("input[ name = website ]").val( response.website); $("#admin_member_img") .attr("src", "images/member_images/" + response.image); }, error: function(error) { alert(error); }La función de error $.ajax toma tres argumentos, no uno:
error: function(xhr, status, thrown)Debe volcar los parámetros 2 y 3 para encontrar su causa, no la primera.