Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76

    [JavaScript/Ajax/JSON] Aiuto Ricevere Dati da dispositivi HW in formato JSON

    Salve A tutti,
    Come da Titolo dovrei ricevere dei dati in formato JSON da alcuni dispositivi Hardware; in particolare si tratta di dispositivi di domotica che inviano dati e ricevono comandi (ON/OFF).

    La richiesta dei dati e l'accensione/spegnimento avvengono richiamando una determinata querystring in un formato del tipo: http://IPdellaCentralina/CLIENT/SerialedelDispositivo/?cmd1="cmd1"&cmd2="cmd2"..ecc...

    A questi comandi il dispositivo risponde con una serie di dati in formato JSON.

    Al momento sto testando i dispositivi con un App per Google Chrome che si chiama Postman che importando un set di API dei dispositivi e personalizzando la querystring riceve e visualizza tali dati; io però avrei bisogno di far ricevere questi dati ad una paginetta WEB.

    Mi sono letto un paio di guide sul formato JSON e come viene gestito; purtroppo in queste guide JSON viene utilizzato per "passare" dati tra linguaggio lato client e linguaggio lato server (es tra JavaScript e PHP). Nel mio caso dovrei ricevere i dati con JavaScript e andare ad inserire i valori nella pagina.

    Da quello che ho letto dovrei usare XMLHTTPrequest che in qualche modo riesce a catturare i dati e poi "parsificarli" tramite le opportune funzioni. Non ho molto chiaro il funzionamento di XMLHTTPrequest potreste darmi una mano???

    Se parte dei dati dovessi salvarli su un DB potrei usare direttamente PHP per ricevere i dati Json e fare una query, o dovrei comunque passare per JS?

    Leggermente O.T. rispetto al resto della discussione (Scusatemi); esiste un modo "furbo" per eseguire il comando di richiesta dati, quindi richiamare una queryString su un altro indirizzo IP (non quello del server dove è caricata la pagina, ma l'IP del dispositivo), senza che si noti il "cambio pagina" e ritorno sulla stessa o aprire la pagina in un'altra scheda???


    Vi ringrazio in anticipo per l'aiuto.
    Ultima modifica di Mrk31; 14-04-2014 a 15:22

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    Grazie mille ho letto la guida...però parla di richieste verso lo stesso dominio (server?)

    Io invece dovrei comunicare con un dispositivo che fa da gateway con un IP diverso da quello dove risiede la pagina PHP in cui ho avrei lo script che effettua la chiamata.

    Ho cercato un po' e ho trovato due metodi per fare questo JsonP (anche con Jquery) o Cross-Origin Resource Sharing (CORP)...fanno al caso mio? Ricevendo dati in JSON è meglio JsonP? Il CORP ho letto essere più nuovo quali sono i pro ed i contro? ci sono dei metodi JQuery anche per questo?

    Non sono AJAX (perchè non sfruttano XMLHttpRequest) per via della restrizione sul dominio, ma agiscono comunque in modo asicnrono giusto? Non devo comunque ricaricare la pagina?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    si agiscono in modo asincrono.

    Se i dati puoi riceverli direttamente da php(e da quanto hai scritto non mi sembra ci siano motivi particolori per cui non dovresti poterlo fare), effettueri la chiamata direttamente dal server(senza problemi di dominio), l'unico vantaggio di farlo con js è il fatto del refresh della pagina.

    Ricevendo dati in JSON è meglio JsonP?
    Per implementare una chiamata Jsonp è necessario che la risorsa esterna che invia i dati indichi il "metodo"(o lo riceve in input) che deve occuparsi di ricevere la risposta, questo metodo viene chiamato callback, quindi la risposta deve essere di questo tipo: "callback(dati in qualunque formato)". Dovresti cambiare la risposta del dispositivo per aggiungere il "callback", cosa che immagino non puoi fare.
    Il CORP se non ricordo male non funziona su IE(o cmq solo su versioni recenti), ci sono anche altre tecniche, ma sono implementabili solo su FF(o cmq browser basati su gecko).

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Grazie mille per la risposta.

    Io volevo evitare di usare il php proprio per il refresh della pagina, che per ricevere dei dati in tempo reale sarebbe preticamente continuo (ogni pochi secondi).

    Per il callback quindi dovrei modificare il "firmware" dei dispositivi? Io da quel poco che ho letto avevo capito che il callback fosse una funzione "implementata" dal ricevente non da chi invia i dati (in questo caso dai DISPOSITIVI) e quindi in qualche modo fosse una sorta di "manda quasta richiesta e quando ricevi risposta gestiscila con questo metodo" e quindi non ci fosse bisogno di modificare i dispositivi.

    Al momento riesco a dare comandi e ricevere dati tramite l'app per Chrome Postman ed ho notato che se il gateway non è disponibile restituisce un messaggio del tipo metodo XMLHttpRequest errore 2 (quindi usando AJAX???) hai idea di coma "lavori" postman è possibile capirlo?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    no non so come effettui le chiamate Postman, mi spiace.

    il callback fosse una funzione "implementata" dal ricevente non da chi invia i dati
    No, il metodo va implementato dal chiamante, anche perche il ricevente non può sapere che te ne farai dei dati restituiti. Il ricevente deve indicare quale metodo deve essere usato, può farlo in modo statico e quindi richiamare sempre la stessa funzione, o in modo dinamico. In quest'utlimo caso il chiamante indica al ricevente quale funzione utilizzare(passando un parametro in input, basta aggiungerlo nell'url). Capirai però che il ricevente deve essere in grado di ricevere dati in input(il nome del metodo cioè il callback) e di elaborarli(impostare la risposta come ti ho indicato prima). Se il tuo dispositivo non è in grado di fare questo non puoi utilizzare jsonp.

    Io volevo evitare di usare il php proprio per il refresh della pagina, che per ricevere dei dati in tempo reale sarebbe preticamente continuo (ogni pochi secondi).
    Penso che questo problema sia superabile, potresti effettuare chiamate ajax alla tua risorsa php, che a sua volta ha recuperato i dati dal dispositvo, cosi eviti il refresh della pagina.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Dunque se ho capito bene io dalla mia pagina web lancerei la richiesta dati come prima ma aggiungendo nella query &callback?nomeFunzione

    Il dispositivo dovrebbe (oltre ad interpretare i dati precedenti come prima) prendere nomeFunzione e restituire una cosa del tipo:

    nomeFunzione(
    {
    nome1 : parametro1
    nome2 : parametro2
    ecc...
    }

    )

    e quindi la return chiama una funzione javascript (sulla mia pagina web) passandogli come parametro il Json. Giusto?
    In pratica a livello "firmware" del dispositivo devo solamente fargli interpretare il nuovo parametro in input (callback) e fargli modificare di conseguenza la return?

    Per la seconda alternativa invece dovrei tramite ajax "richiedere" i dati ad una pagina apposita php che si occupa di affattuare la "query" lato server e mi restituisce i dati tramite ajax in modo che possa "aggiornarli" sulla pagina iniziale senza refresh?

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    e quindi la return chiama una funzione javascript (sulla mia pagina web) passandogli come parametro il Json. Giusto?
    In pratica a livello "firmware" del dispositivo devo solamente fargli interpretare il nuovo parametro in input (callback) e fargli modificare di conseguenza la return?
    Per la seconda alternativa invece dovrei tramite ajax "richiedere" i dati ad una pagina apposita php che si occupa di affattuare la "query" lato server e mi restituisce i dati tramite ajax in modo che possa "aggiornarli" sulla pagina iniziale senza refresh?
    Affermativo a tutte le domande, hai capito perfettamente

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Ok grazie mille sei stato utilissimo.
    Faccio un paio di tentativi e vedo se vale la pena andare a toccare il firmware (anche perchè non posso fare io ma l'ing. che ha fatto i disp quindi ci vorrebbe + tempo).

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    76
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    Affermativo a tutte le domande, hai capito perfettamente
    Ho fatto un paio di prove usando Jquery (in particolare getJSON) però ho bisogno di settare la richiesta in modo particolare:

    - per accedere ai dispositivi devo settare la basic authentication e dare user e pass. Con PostMan inserisco user e passw (max 10 caratteri altrimenti li "taglia") poi confermo e mi fa vedere la pass "cifrata" ma non l'user.
    ho cercato un po' in giro per inserire la basic authentication con Jquery alcuni dicono che si può fare da getJSON altri dicono che devo usare $.ajax (che settato a dovere sarebbe la versione estesa di getJSON). Una volta inserita la basic authentication i dati vengono cifrati dal "protocollo" o devo cifrarli io prima? Non ho idea di che algoritmo di cifratura usi.

    - usando il metodo che mi hai detto tu per byassare il "limite di dominio" imposto dai browser e quindi creare un files php che effettua le richieste e non utilizzando JsonP devo passare comunque qualche funzione alla getJSON (anche se non di callback)?

    - purtroppo i dispositivi ogni tanto danno errori di trasmissione di diversi tipi e quindi dovrei prevedere un meccanismo di "handshake" ed effettuare dei ri-tentativi. Sai per caso in Jquery come posso controllare i seguenti valori:

    --> risposta http. in particolare http 200 OK/ http errori 404, 405, ecc???

    --> errori vari restituiti tramite Json ma in formato non Json quindi non {nome: valore} ma ad esempio una stringa kokokokokoko
    come posso trattarli? se io parsificassi con php con jsondecode mi darebbe errore oppure mi restituirebbe la stringa? volendo fare i controlli direttamente lato client? (in JS e/o Jquery)

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.