Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Pasar por json un string con comillas dentro

Estas en el tema de Pasar por json un string con comillas dentro en el foro de PHP en Foros del Web. Muy buenas. La duda es muy simple. Pretendo llamar con ajax a un script PHP que devuelve un código de error y un mensaje en ...
  #1 (permalink)  
Antiguo 07/03/2014, 14:35
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Pasar por json un string con comillas dentro

Muy buenas. La duda es muy simple. Pretendo llamar con ajax a un script PHP que devuelve un código de error y un mensaje en JSON.

Si el código de error es 0, recargaré la página con javascript, y si es distinto de 0 tengo que mostrar un formulario, que había pensado pasarselo en el mensaje. Pero tengo el problema de las comillas. Se detectan las comillas dobles y al parsear el JSON da errores. He probado con la función de php addslashes pero no resuelve el problema.

Código PHP:
Ver original
  1. $respuesta = array (
  2.     "error" => 1,
  3.     "msg" => addslashes ($str_respuesta)
  4. );
  5. echo json_encode($respuesta);
  6.  
  7. // Donde $str_respuesta lleva el formulario.

Tengo una solución simple, que es cargar con ajax directamente lo que devuelve el script en un div de la página con .load de jquery, pero si lo hago así no podría recargar la página automáticamente si el código de error devuelto es 0.

Alguna idea?

Gracias.
  #2 (permalink)  
Antiguo 07/03/2014, 15:00
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Pasar por json un string con comillas dentro

Cita:
Si el código de error es 0, recargaré la página con javascript, y si es distinto de 0 tengo que mostrar un formulario, que había pensado pasarselo en el mensaje. Pero tengo el problema de las comillas. Se detectan las comillas dobles y al parsear el JSON da errores. He probado con la función de php addslashes pero no resuelve el problema.
Que te hace pensar que eso lo puedes usar json de esa forma?
Cita:
JSON is built on two structures:

  • A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
  • An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
Fuente: http://json.org/
Puedes usar jQuery.get() o jQuery.post () para obtener la respuesta como html usando la propiedad dataType
Te remito a la documentación por que esto poco tiene que ver con php: http://api.jquery.com/jQuery.get/
http://api.jquery.com/jQuery.post/
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 07/03/2014, 15:20
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar por json un string con comillas dentro

Gracias por tu respuesta. Ya conozco esas funciones, de hecho utilizo la función $.ajax de jquery para la llamada al script. Pero no quiero cargar la respuesta generada en el script directamente porque, como dije, si pasan determinadas cosas tengo que recargar la página automáticamente. Podría pedirle al usuario que lo hiciera, pero me parece muy cutre
  #4 (permalink)  
Antiguo 07/03/2014, 15:34
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Pasar por json un string con comillas dentro

Cita:
Iniciado por DandyCC Ver Mensaje
Gracias por tu respuesta. Ya conozco esas funciones, de hecho utilizo la función $.ajax de jquery para la llamada al script. Pero no quiero cargar la respuesta generada en el script directamente porque, como dije, si pasan determinadas cosas tengo que recargar la página automáticamente. Podría pedirle al usuario que lo hiciera, pero me parece muy cutre
Como lo comente antes, esto no tiene nada que ver con php. Es mas un tema de jquery y json y para eso hay un foro apropiado.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #5 (permalink)  
Antiguo 07/03/2014, 17:13
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar por json un string con comillas dentro

No encontré un subforo de json, y como uso jquery y php, decidí ponerlo aquí.
  #6 (permalink)  
Antiguo 07/03/2014, 17:20
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pasar por json un string con comillas dentro

Adicionalmente, la función json_encode() automáticamente escapa las comillas, por ende no es necesario ningún tipo de transformación adicional.

Así que si algo no funciona será porque el diseño de tu JSON está mal formado.

¿Es posible que muestres cómo asignas $str_respuesta o hay que adivinar?
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 07/03/2014, 18:33
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar por json un string con comillas dentro

Se genera dinámicamente en función de algunos parámetros internos y de la BD, ponerlo entero sería muy largo, dejo el principio;

Código PHP:
Ver original
  1. $str_respuesta = '<form name="form_actualizar_alum_curso" id="form_actualizar_alum_curso" method="" action="">';
  2.  
  3. // Aqui va un foreach para recorrer un array que se extrae de la BD
  4. $str_respuesta .= '<table border="0">';
  5. $str_respuesta .= '<tbody>';
  6. $str_respuesta .= '<tr valign="top">';
  7. $str_respuesta .= '<td>';
  8. $str_respuesta .= '<input type="radio" name="' . $alum_nuevo . '" value="nuevo" checked />';
  9. $str_respuesta .= '</td>';
  10. $str_respuesta .= '<td>';
  11. $str_respuesta .= 'Añadir a "' . $alum_nuevo . '" como un alumno nuevo de este curso.';
  12. $str_respuesta .= '</td>';
  13. $str_respuesta .= '</tr>';

En la fase de pruebas, $str_respuesta se mostraba en un div de la página con la función de jquery .load y se mostraba bien.

PD: pateketrueke, si al final consigo terminar este proyecto y ganar algo de dinero con él, voy a tener que compartirlo contigo! Me has resuelto la gran mayoría de dudas
  #8 (permalink)  
Antiguo 07/03/2014, 19:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Pasar por json un string con comillas dentro

Pues lo dicho, eso no debería generar ningún problema, no importa lo que le pases a json_encode() siempre lo escapará correctamente.

De igual forma sería bueno saber exactamente el tipo de respuesta que recibe tu Javascript y el mensaje de error, etc.

Aunque ya no es responsabilidad de PHP hasta ese punto.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #9 (permalink)  
Antiguo 08/03/2014, 18:06
 
Fecha de Ingreso: junio-2012
Mensajes: 147
Antigüedad: 11 años, 9 meses
Puntos: 1
Respuesta: Pasar por json un string con comillas dentro

Ya está solucionado. Como predijiste, debía haber algún tipo de error cuando se generaba $str_respuesta, porque he cambiado varias cosas para cambiar el diseño y ahora ya funciona.

Gracias de nuevo por el interés. Saludos.

Etiquetas: comillas, formulario, json, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:53.