Visualizzazione dei risultati da 1 a 2 su 2

Discussione: MXLRequest , XML e JSON

  1. #1

    MXLRequest , XML e JSON

    Buongiorno, ho un problema in un file .html che, grazie ad una richiesta con XMLHttpRequest(), preleva dei dati da un server che lavora con il protocollo XML-RPC. Ora, io gli passo una stringa, che è quella che questo server vuole come parametro e successivamente il server mi risponde correttamente con un xml e al suo interno un json, contenente tutti i dati che mi servono. Ma come faccio a prelevare quei dati del JSON che a me servono?
    Lascio il codice...

    function invia(){
    var request_xml = '<?xml version="1.0"?><methodCall><methodName>Comitato</methodName><params><param><value><string>username</string></value></param><param><value><string>pwd</string></value></param></params></methodCall>';
    request_xml = request_xml.replace("username", user);
    request_xml = request_xml.replace("pwd", pwd);

    var res = encodeURIComponent(request_xml);
    var http = new XMLHttpRequest();
    var url = "qui c'è l'url del sito che però non scrivo ";
    var params = "request_xml="+encodeURIComponent(res);
    http.open("POST", url, true);


    //Send the proper header information along with the request
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");


    http.onreadystatechange = function() {
    //Call a funct ion when the state changes.
    if(http.readyState == 4 && http.status == 200) {
    if(!http.responseText.includes("null")){
    messaggio.innerHTML = "OK! Accesso effettuato correttamente";
    var radice = http.responseText;
    console.log(radice);
    }
    else{
    alert("Errore nella richiesta");
    }
    }

    }
    http.send(params);
    }

    Quel famoso console.log(radice) ritorna questo:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <methodResponse>
    <params>
    <param>
    <value>
    <string>{
    &#34 ; id " : " 21 " ,
    &#34 ; id_comitato " : " 22 " ,
    &#34 ; auth " : " 3 " ,
    &#34 ; comitato " : " COMITATO TEST " ,
    &#34 ; nome " : " Operatore Test "}</string>
    </value>
    </param>
    </params>
    </methodResponse>

    Questo è un JSON ma come faccio a prendere i valori?(Non preoccupatevi dei numeri strani
    Ultima modifica di LorenzoCabutto; 15-04-2018 a 15:27

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    4,042
    Salve, bisognerebbe fare un doppio parsing per arrivare a leggere i dati dentro l'oggetto JSON. Dal momento che questo sta dentro un XML, bisogna eseguire prima il parsing del documento XML, recuperare quindi il dato che sta dentro il nodo interessato (<string>) che appunto è un JSON (in formato testuale), quindi eseguire il parsing di quest'ultimo per ottenere un oggetto manipolabile via JavaScript.

    Se utilizzi/puoi utilizzare jQuery, il procedimento potrebbe risultare anche abbastanza semplice. E' comunque possibile risolvere anche in puro JavaScript.

    C'è però un problema, il codice che ottieni come risposta dal server è mal formato, sia per il JSON sia (di conseguenza) per il documento XML.

    Partiamo dal JSON.
    Non preoccupatevi dei numeri strani
    Se intendi quei codici &#34 ; c'è da preoccuparsi.

    Due cose. Ci sono degli spazi bianchi di troppo sia prima del ; (punto e virgola) sia quelli adiacenti i doppi apici. Questo rende inconsistente il codice a livello sintattico e strutturale. Forse la causa è dovuta all'editor del forum? Nel caso posta esattamente il corretto codice usando gli opportuni tag [ code ], cosa che andrebbe comunque sempre fatta quando si posta del codice sul forum (vedi regolamento di sezione).

    Se invece quello è esattamente ciò che ottieni, allora c'è qualcosa che suona strano.
    In teoria questa entità html (senza spazi):
    codice:
    &#34;
    corrisponde proprio al carattere " (doppio apice) che serve per definire correttamente le proprietà (e i valori) dell'oggetto JSON. Potrei anche pensare che si tratti di una mezza codifica eseguita in risposta dal server (o forse una codifica di troppo) ma la cosa non è chiara; gli altri doppi apici non sono stati comunque codificati allo stesso modo e ci sono degli spazi di troppo. In ogni caso l'oggetto JSON scritto in quel modo non è valido.

    A parte questo, prima di arrivare al JSON va fatto il parsing del codice XML. Anche in questo caso però incontriamo dei problemi causati proprio da quei caratteri & che rendono l'XML stesso "non well-formed", cioè impossibile da parsare normalmente con JavaScript.

    Ad ogni modo, l'intero contenuto di <string> sarebbe meglio fosse "avvolto" da un elemento <![CDATA[ ]]>.
    Questo non è obbligatorio ma è uno standard utilizzato generalmente per contenuti testuali dentro i nodi XML in modo da prevenire l'eventuale presenza di caratteri non consentiti che romperebbero la struttura dello stesso XML.

    Ora, prima di procedere bisogna chiarire alcune cose:
    - Il codice che hai postato (visibile qui sul forum) è esattamente quello della tua situazione?
    - Puoi usare jQuery?

    Fai sapere.
    Buon proseguimento e buona permanenza sul forum.
    Prima di postare considera che tra i link utili puoi trovare il 75% delle risposte alle tue domande; il 15% tra i post del forum; il 9% sul web.
    Ti resta l’1% ... usalo bene!

    Le cattive domande sono quelle che non meritano risposta, le buone domande sono quelle che non hanno risposta
    L'Itailano non e nu'opnioine. E' improntate uslaro correattemtne sul froum. Garize!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.