2012-02-01 33 views
27

Estoy enviando una solicitud ajax con 2 valores de publicación, la primera es "acción" que define qué acciones tiene que analizar mi script php, la otra es "id" que es la identificación del usuario que tiene que analizar el script .
El servidor devuelve 6 valores dentro de un array() y luego se codifica a JSON con la función de PHP: json_encode();
Algunos de mis respuestas son HTML, pero cuando codificar a JSON, que se escapa "/" manera que se convierta "\/"
¿cómo desactivo eso?

también cuando no sé cómo mostrar esto en jQuery cuando recibo la respuesta del servidor, pensé que poner todo en un div solo mostraría los números y códigos HTML que había solicitado, pero muestra el conjunto como está codificado en PHP.jQuery ajax request with json response, how to?

PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo json_encode($response); 

jQuery:

$.ajax({ 
    type: "POST", 
    dataType: "json", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    complete: function(data) { 
     $('#main').html(data.responseText); 
    } 
}); 

¿Cómo puedo hacer este trabajo a JSON?

+0

Se puede también volcar su respuesta JSON para tener una mejor idea del problema? No estoy seguro de lo que quiere decir con "/" por lo que se convierte en "/" – Sid

+0

¿Ha intentado http://api.jquery.com/jQuery.getJSON/? –

+0

perdón sid hice una barra diagonal inversa, pero desapareció :) pero cada barra normal recibe una barra invertida antes de "barra invertida" + "barra diagonal normal" ka_lin: lo miré pero no lo entendí, y si lo hiciera, ¿cómo lo haría? envío algunos datos de la publicación con la solicitud? – Flaashing

Respuesta

38

Es necesario llamar a la

$.parseJSON(); 

Por ejemplo:

... 
success: function(data){ 
     var json = $.parseJSON(data); // create an object with the key of the array 
     alert(json.html); // where html is the key of array that you want, $response['html'] = "<a>something..</a>"; 
    }, 
    error: function(data){ 
     var json = $.parseJSON(data); 
     alert(json.error); 
    } ... 

ver esto en http://api.jquery.com/jQuery.parseJSON/

si todavía tiene el problema de barras: búsqueda de security.magicquotes.disabling.php o: function.stripslashes.php

Nota:

Esta respuesta aquí es para aquellos que intente usar $.ajax con la propiedad dataType establecida en json e incluso eso obtuvo el tipo de respuesta incorrecta La definición del header('Content-type: application/json'); en el servidor puede corregir el problema, pero si devuelve text/html o cualquier otro tipo, el método $.ajax debe convertirlo a json. Hago una prueba con versiones anteriores de jQuery y solo después de la versión 1.4.4 la fuerza $.ajax para convertir cualquier tipo de contenido al dataType pasado. Entonces, si tiene este problema, intente actualizar su versión de jQuery.

+0

devuelve un error: falta) después de la lista de argumentos "alert (data.0);" – Flaashing

+0

sí, fue un ejemplo. Debe definir su matriz con una clave que pueda convertirse en un objeto, porque los números pueden ser. como $ response ['html'] = "something"; de lo que usted llama utilizando el parseJSON json.html (como el ejemplo anterior). – Guilherme

+0

¡oh sí funciona! tan simple como eso es lo que quiero :) ¡gracias! – Flaashing

23

En primer lugar, le ayudará si establece los encabezados de su PHP para servir JSON:

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

En segundo lugar, que le ayudará a ajustar su ajax llamada:

$.ajax({ 
    url: "main.php", 
    type: "POST", 
    dataType: "json", 
    data: {"action": "loadall", "id": id}, 
    success: function(data){ 
     console.log(data); 
    }, 
    error: function(error){ 
     console.log("Error:"); 
     console.log(error); 
    } 
}); 

Si tiene éxito, el la respuesta que reciba debe tomarse como JSON verdadero y un objeto debe registrarse en la consola.

NOTA: Si desea recoger html puro, es posible que desee considerar usar otro método para JSON, pero personalmente recomiendo usar JSON y representarlo en html utilizando plantillas (como Handlebars js).

+0

intenté su ejemplo, en mi consola Firebug recibo la respuesta: faltando} después de la lista de propiedades "éxito: función (datos) {" Sí, se perdió un coma después de configurar los datos. pero ahora me da una respuesta codificada en json en firebug – Flaashing

+0

Tuve un error de sintaxis - "éxito" debería ser "exitoso" y omití una coma. Debería poder explorar su respuesta ahora y sacar partes de ella al DOM. – sgb

+0

Sí sobre eso, ¿cómo se divide la matriz en 6 bits en jquery y se los da salida en 6 elementos diferentes? – Flaashing

1

Como está creando un marcado como una cadena, no tiene que convertirlo en json. Simplemente envíelo ya que combina todos los elementos de la matriz usando el método implode. Prueba esto.

cambio PHP

$response = array(); 
$response[] = "<a href=''>link</a>"; 
$response[] = 1; 
echo implode("", $response);//<-----Combine array items into single string 

JS (Cambiar el tipo de datos de JSON a html o simplemente no establecen que jQuery dará cuenta de ello)

$.ajax({ 
    type: "POST", 
    dataType: "html", 
    url: "main.php", 
    data: "action=loadall&id=" + id, 
    success: function(response){ 
     $('#main').html(response); 
    } 
}); 
+0

@Flaashing - ¿Has probado esto? – ShankarSangoli

+0

no porque quiero que cada uno de los 6 valores se muestre en 6 elementos diferentes :) – Flaashing

2

Conecte su controlador de cliente javascript y el controlador de servidor php usando envío y recepción de códigos de operación con datos enlazados. Por lo que su código PHP puede enviar como delta funcional de respuesta para js recepient/oyente

ver https://github.com/ArtNazarov/LazyJs

Lo siento por mi mala Inglés