Foros del Web » Programando para Internet » Jquery »

Problemas al procesar respuesta AJAX en JSON

Estas en el tema de Problemas al procesar respuesta AJAX en JSON en el foro de Jquery en Foros del Web. Buenos días. Estoy teniendo problemas para procesar una respuesta AJAX desde el servidor. Este es el código simplificado (eliminando beforeSend y complete): @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 02/08/2012, 01:39
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años
Puntos: 4
Problemas al procesar respuesta AJAX en JSON

Buenos días.

Estoy teniendo problemas para procesar una respuesta AJAX desde el servidor. Este es el código simplificado (eliminando beforeSend y complete):

Código Javascript:
Ver original
  1. function cargaRevista(numero) {
  2.     lblResumenSel = $('#<% = lblResumenSel.ClientId %>');
  3.     $.ajax({
  4.         type: 'POST',
  5.         url: rutaDef+'pagina.aspx/resumenRevista',
  6.         data: "{'numero':'" + numero + "'}",
  7.         contentType: "application/json; charset=utf-8",
  8.         dataType: 'json',
  9.         dataFilter: filtroRespuestaAjax,
  10.         success: function(resJSON) {
  11.             alert(resJSON); //Aquí obtengo null
  12.             if (resJSON.error) {
  13.                 alerta("Error: " + resJSON.error);
  14.             } else {
  15.  
  16.                 ......
  17.  
  18.             }
  19.         },
  20.         error: function(xhr, error) {
  21.             alerta("Error " + xhr.status + ". " + error, 450);
  22.         }
  23.     });
  24. }
  25.  
  26. function filtroRespuestaAjax(data) {
  27.     alert(msg); //Aquí obtengo undefined
  28.     var msg = eval('(' + data + ')');
  29.     if (!msg.hasOwnProperty('d')) { return msg; }
  30.     else if (!$.browser.msie) { return msg.d; }
  31.     else { return eval('(' + msg.d + ')'); }
  32. }

Sin embargo viendo el cuerpo de la respuesta en la herramienta para desarrolladores de IE9 tengo esto:

{"d":"[{\"numero\":\"10\",\"imgDisp\":\"False\",\"resumen \":\"Resumen del número 10 de la revista\"}]"}

Tengo muchos métodos con $.ajax y no sé qué le está pasando a este.

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #2 (permalink)  
Antiguo 02/08/2012, 02:44
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 5 meses
Puntos: 127
Respuesta: Problemas al procesar respuesta AJAX en JSON

Cita:
{"d":"[{\"numero\":\"10\",\"imgDisp\":\"False\",\"resum en \":\"Resumen del número 10 de la revista\"}]"}
Eso es JSON técnicamente válido pero parseJSON de AJAX [dataType: 'json'] no lo va a poder parsear correctamente porque está tratando de escapar las comillas dobles e introduces comillas dobles en una estructura en la que ya existen comillas dobles.

SI vas a escapar comillas tienes que usar un escape del escape.

"\"variable\"" -> "\\"variable\\""

y así la salida será

"variable"

Lo que en definitiva significa que debe ser

Cita:
'[{"d":"[{\\"numero\\":\\"10\\",\\"imgDisp\\":\\"False\\",\ \"resum en \\":\\"Resumen del número 10 de la revista\\"}]"}])
Eso sucede porque cuando hay comillas dobles, lo que hay en el interior se considera string, lo que significa que las comillas dobles tendrán que ser escapadas, pero el carácter de escape sólo escapa fuera del string, por lo que el parseador tendrá que saber que el carácter de escape no es un carácter normal sino un carácter de escape (\\) y más tarde se introduce el carácter a escapar (\\")

Revisa del lado del servidor, la generación del JSON.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor

Última edición por dontexplain; 02/08/2012 a las 03:04
  #3 (permalink)  
Antiguo 02/08/2012, 03:08
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años
Puntos: 4
Respuesta: Problemas al procesar respuesta AJAX en JSON

Gracias dontexplain por tu pronta respuesta.

Para generar JSON en el lado de servidor estoy utilizando .Net de la siguiente manera (que en otros caso no me da problemas):

Código vb:
Ver original
  1. <Serializable()> _
  2. Public Class Revista
  3.   Public numero,imgDisp,resumen As String
  4. End Class
  5.  
  6. <WebMethod()> _
  7. <ScriptMethod(ResponseFormat:=ResponseFormat.Json)> _
  8. Public Shared Function resumenRevista(ByVal numero As String) As String
  9.     Dim lista As New List(Of Revista)
  10.     Dim jss As New Serialization.JavaScriptSerializer
  11.  
  12.     ...
  13.  
  14.     Dim rev As New Revista
  15.     With rev
  16.         .numero = 10
  17.         .imgDisp = False
  18.         .resumen = "Resumen del número 10 de la revista"
  19.     End With
  20.     lista.Add(rev)
  21.     Return jss.Serialize(lista)
  22. End Function
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!

Etiquetas: ajax, json
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 18:03.