Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Problemi con una GET

  1. #1

    Problemi con una GET

    Salve a tutti! Sono Stefano.
    Ho una rete locale nella quale ho un Server, altri computer e il mio computer.
    Ho bisogno di effettuare richieste HTTP GET al Server, che mi dovrebbe rispondere con una pagina di XML o JSON. Il mio problema è che se io da Browser (Chrome e Internet Explorer) apro "pc67c:8080/?cmd=readmachinetext" il server mi risponde correttamente mostrandomi la mia pagina di tag XML:

    2013-10-22_091111.jpg

    Allora io pensavo di fare una richiesta di questo tipo:

    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Richiesta di variabili XML</title>
    
    
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script type="text/javascript">
    
    
        // Accepts a url and a callback function to run.
        function requestX() {
    
    
    
    
            // Indirizzo pagina
            var url = "http://cosmopanelz:8080/?cmd=readmachinetext";
    
    
            var request = $.ajax({
                url: url,
                datatype: "xml",
                type: "GET"
            });
    
    
            request.done(function (xmlData) {
                window.alert("got it!");
                Elem = document.getElementsByClassName("setpoint");
                for (I = 0; I < Elem.length; I++) {
                    document.getElementsByName(Elem[I].name)[0].value = $(xmlData).find(Elem[I].name).text();
                }
            });
            request.fail(function (jqXHR, textStatus) {
                alert("Request failed: " + textStatus);
            });
        }
    
    
    
    
    </script>
    </head>    
    
    
    
    
    <body>
    <input type="button" value="Vai!" onclick="requestX()" />
    <br /><br />
    <span>MAS197b030 </span><input type="text" class="setpoint" name="MAS197b030"/>
    <br /><br />
    <span>MAS197b056 </span><input type="text" class="setpoint" name="MAS197b056"/>
    <br /><br />
    <span>MAS197b078 </span><input type="text" class="setpoint" name="MAS197b078"/>
    <br /><br />
    <span>MAS197b209 </span><input type="text" class="setpoint" name="MAS197b209"/>
    <br /><br />
    <span>MAS197b223 </span><input type="text" class="setpoint" name="MAS197b223"/>
    <br /><br />
    </body>
    </html>
    Che semplicemente alla pressione di un bottone fa la richiesta al Server, pesca le variabili XML dalla risposta e le mette nei campi di input corrispondenti. Sono sicuro della correttezza del codice perché puntando una pagina XML con le stesse variabili nella root dove ho salvato questa pagina, quindi in locale, funziona correttamente. Se invece, come nell'esempio, punto il mio server non ottengo risposta e la funzione cade in errore "Request: failure".
    Sniffando sul Server ho tirato fuori le richieste che gli arrivano, nel caso vengano fatte con il Browser:

    codice:
    2013/10/14 13:58:14   dato arrivato: 2013/10/14 13:58:14   GET /?cmd=readmachinetext HTTP/1.1
    Host: pc67c:8080
    Connection: keep-alive
    
    
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36
    
    
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
    If-Modified-Since: Fri, 11 Oct 2013 18:48:47 GMT
    
    
    
    
    GET
    HTTP/1.0  200 OK
    Date: Mon, 14 Oct 2013  13:58:14 GMT
    Server: Server 
    MIME-version: 1.0
    Content-type: text/plain
    Last-modified: Mon, 14 Oct 2013 13:58:14 GMT
    Connection: keep-alive
    Content-length:  20745
    o nel caso vengano fatte con la mia funzione:

    codice:
    2013/10/14 14:09:14   dato arrivato: 
    2013/10/14 14:09:14   GET /?cmd=readmachinetext HTTP/1.1
    Host: pc67c:8080
    Connection: keep-alive
    Origin: http://localhost:58751
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36
    Accept: */*
    Referer: http://localhost:58751/
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
    If-Modified-Since: Mon, 14 Oct 2013 13:58:14 GMT
    
    
    
    
    GET
    HTTP/1.0  200 OK
    Date: Mon, 14 Oct 2013  14:09:14 GMT
    Server: Server 
    MIME-version: 1.0
    Content-type: text/plain
    Last-modified: Mon, 14 Oct 2013 14:09:14 GMT
    Connection: keep-alive
    Content-length:  20745
    Questo è quanto. Qualcuno sa dirmi perchè col browser ottengo risposta e con la richiesta fatta dalla mia funzione non ottengo risposta?
    Grazie a tutti per la collaborazione! Spero di aver dato abbastanza elementi.

  2. #2
    Se ho ben capito la funzione $.ajax() viene effettuata perchè il server restituisce il codice 200, successivamente richiama la funzione request.fail(), cosa ti da come textStatus?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    non è possibile effettuare chiamate ajax da locale(deve esserci un web-server sotto) e cross-domain, cioè richiamare una risorsa che sta in un altro dominio

  4. #4
    Come text status mi dice "failed"... E' una cosa molto strana!

  5. #5
    @Vindav - Aiutami a capire: il server remoto non sta funzionando da web server? tant'è che se lo interrogo da browser mi risponde con dell'xml, come da immagine. Cosa intendi con web server? Dopodiché ho indagato la questione delle richieste cross-domain, e ho fatto un esperimento caricando una pagina xml su un mio spazio web su altervista; ho visto appunto che devo utilizzare tecniche di quel tipo (nella fattispecie sono ricorso a YQL).
    Il mio problema è che il mio sistema è appoggiato su una rete locale, quindi YQL non può funzionare. Altre soluzioni cross-domain richiedono di agire lato server, cosa che io non posso fare (perchè dovrei andare a mettere le mani su tutti i sistemi che ho già installato). Quindi stavo cercando una soluzione lato client. Come fa il browser a ottenere la risposta?

  6. #6
    Tra l'altro, all'interno della richiesta ajax:

    codice:
            
    var request = $.ajax({
    url: url,
    datatype:"xml",
    type: "GET"                    
    }); 
    c'è un errore sulla T di dataType che va maiuscola

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Intendo che sul tuo computer ci deve essere installato un web-server, ma rileggendo il tuo primo post ho notato questo:

    origin: http://localhost:58751

    Quindi hai già un web-server installato.
    Per quanto riguarda le richieste cross domain, si possono fare tranquillamente con js/jquery senza scomodare YQL o altro. La tecnica si chiama jsonp, è abbastanza complessa per un neofita e cmq richiede una riconfigurazione lato server.

  8. #8
    Sisi ho già considerato la strada del jsonp, ma mi pare di aver capito che richieda una funzione lato server che restituisca il json, quindi dovrei comunque andare a mettere le mani sui server.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.