Problema con JQuery y respuesta XML

Que tal, Estoy tratando de hacer una petición ajax con jquery pero al momento de recibir la respuesta (la cual es un text/xml) siempre me marca un error, ojalá puedan ayudarme, mi petición es esta:

$.ajax({
        type: "POST",
        url: urlServer,
        data: strXml,
        contentType: 'text/xml; utf-8',
        dataType: 'xml',
        processData: false,
        success: function(data) {
            var jsonResp = $.xml2json(data);
            if (jsonResp.header.resp_code === "00") {
                var states = jsonResp.message.list;
                var statesArray = states.split("\r\n");
                var options = "<option value=\"\">seleccione estado<option>";
                var splited;
                for (var i = 0; i < statesArray.length; i++) {
                    splited = statesArray[i].split(fs);
                    options+="<option value=\""+splited[0] +"\">"+ splited[1]+"</option>";
                }
                $("#stateid").html(options);
            } else {
                showDlg("Registro", jsonResp.header.resp_message + "<br/>Código de respuesta: " + jsonResp.header.resp_code, "Aceptar", dlgCose);
            }
        },
        error: function(jqXHR, textStatus, errorThrown) {
            window.console.log("errorThrown: " + errorThrown);
            window.console.log("textStatus: " + textStatus);
        }
    });

El asunto es que cada vez que hago una petición cae en la parte de error y lo que imprime el window.console.log es lo siguiente:
errorThrown: Error: Invalid XML:

<?xml version="1.0" encoding="UTF-8"?>
<sbt-ws-message version="1.0">
    <header>
        <type>002501</type>
        <servertime>21042015145931</servertime>
        <resp-code>00</resp-code>
        <resp-message>APROBADA</resp-message>
    </header>
    <message>
        <text id="list"><![CDATA[1Distrito Federal
5Guerrero]]></text>
    </message>
</sbt-ws-message>

textStatus: parsererror
Como ven la petición es aprobada por parte del server pero la respuesta dice que hay un error en el xml.
Cabe mencionar que en dicha respuesta dentro de CDATA vienen unos caracteres 28 (FS) entre el 1 y Distrito Federal y entre 5 y Guerrero
me gustaría saber de que lado es la corrección según yo dentro de CDATA no debería tener problemas con caracteres especiales.

2 Respuestas

Respuesta
1

Aclarando lo anterior, Marc Climent tenía razón en la respuesta que me dio. Lo único que tuve que hacer diferente para que funcionara es modificar el dataType de la petición de "xml" a "text" y remplazar los caracteres especiales.

Respuesta
4

Efectivamente parece que hay unos caracteres no válidos dentro del CDATA. Este CDATA no es un sitio donde se puede poner cualquier cosa, por lo que efectivamente el XML no está bien formado.

Creo que el problema no es tuyo y tiene mala solución así que lo que puedes hacer es arreglar el XML antes de convertirlo en JSON.

success: function(data) {
    data = data.replace(String.fromCharCode(28), '\n');
    var jsonResp = $.xml2json(data);
    ...

Esto lo que hace es usar construir una cadena a partir del código decimal del carácter y reemplazarlo por una nueva línea (o lo que quieras).

Hola que tal,

Hice lo que me recomendaste y de remplazar el caracter 28 por un una nueva línea pero el resultado es el mismo.

Probé comentando el código quitando casi todo dejando solo un alert("exito"); para saber si el problema era el método que convertía el xml en json, sin embargo tampoco tuve un buen resultado.

¿Habrá algo más que he omitido? 

Dejé el código así para la última prueba que te comento

success: function(data) {            
            alert("exito");
        },

Veo que ya lo has resuelto, efectivamente poner dataType: 'xml' hace que internamente jQuery procese el documento como si fuera un XML antes de devolverlo y por eso seguía dando problemas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas