Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52

    chiamate Ajax su stessa pagina php server

    Ho un file HTML su server che chiama ogni secondo, con una funzione Ajax in POST, una pagina content.php che restituisce dei valori in formato JSON.

    Ho vari browser che visualizzano la stessa pagina HTML e quindi la risposta JSON non arriva sempre al browser a cui serve, ma magari a un altro che non l'ha richiesta.

    Come si invia una risposta al solo browser che la richiede, anche se stanno vedendo tutti la stessa pagina html che si collega allo stesso file php?

  2. #2
    Ajax arriva solo a chi lo richiede. Spiega meglio il problema se puoi, non è chiaro.

    ps ad ogni modo inviare ajax ogni secondo ha poco senso: tutt' al più dovresti reinviarlo ogni qual volta ottieni la risposta dal server, altrimenti se il server fosse sovraccarico metti in stack un mucchio di richieste che vengono sì inviate ogni secondo, ma possono ricevere ciascuna la loro risposta ogni minuto...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52
    Bè, sì hai ragione. E' che volevo semplificare una situazione che è molto più complicata:

    Ho un server a casa che mi elabora alcuni dati di una centralina.
    Voglio monitorarli da remoto e quindi devo poter accedere ai dati.
    Dato che Ajax può solo eseguire una richiesta e non riceverne una, non posso inviare i dati direttamente dal server casa.

    Quindi ho pensato così:
    Genero un'unica sessione per condividere le variabili da un server php.
    Invio i dati da casa a un server php ogni volta che cambiano.
    Dalla pagina html effettuo chiamate ogni secondo al server php per aggiornare i dati prima possibile (non sapendo esattamente quando arrivano).
    Il server php, quando ha ricevuto i dati da casa, aggiorna alcune variabili e quindi fa l'invio dei dati JSON al browser e poi ricancella la variabile aspettando i dati nuovi.

    Funziona ottimamente se ho un solo browser.

    Se ce ne sono di più, ho il problema descritto nel primo post: a volte me li invia al browser sbagliato.

    Sì, lo so che è complicato, se non avete capito cerco di spiegare meglio.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52
    Alucune precisazioni:
    il server a casa non è ovviamente un php, è un programma che è in grado di usare Wininet, quindi inviare-ricevere dei dati in POST.

    I browser, oltre a visualizzare i dati, possono interagire facendo quindi delle richieste al server php che poi le invia al server di casa al successivo invio dei dati da casa.

    Casa risponde al php che poi dovrebbe smistare i dati richiesti al giusto browser.
    E qui c'è il problema, dato che non può inviarli direttamente al browser che ha fatto la richiesta, ma deve aspettare una delle chiamate Ajax di ogni secondo, per inserirli nella risposta.

    Ma se i browser sono più di uno, questa risposta può finire nel browser sbagliato...

  5. #5
    Non ho capito nulla, ma magari sono io e qualcun altro capisce e può aiutarti.

    Tengo solo a specificare che ajax non invia solo dati, ma rimane in ascolto di una risposta del server (che c'è sempre): per questo finchè non arriva la risposta, non ha senso inviare altre richieste con lo stesso ajax, tanto finchè il server non ha risposto alla prima, non ti elabora la seconda se usi sempre lo stesso browser.

    Quanto alla specificità, non vedo come sia possibile che un browser diverso da quello che ha inviato ajax possa riceverne la risposta. Credo che tu stia facendo dei test in localhost e tu sia indotto in errore avendo magari aperto più tabs su uno stesso browser o più finestre dello stesso browser - oppure potresti avere le idee confuse (e non ci sarebbe nulla di male, sia chiaro) su come opera ajax - ma dovresti chiarire se è così, ovvero che conoscenza ed esperienza hai di ajax perchè quello che riporti qui non s'è mai sentito: un ajax che invia le risposte a qualcun altro che non ha fatto le richieste...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52
    Il mio livello di esperienza di ajax non è elevato, però ho capito come funziona e ti assicuro che non è in localhost, ma tutto da server remoto. Anzi confesso che è la mia prima applicazione ajax-php, però non mi pare male dato che funziona perfettamente con un solo browser attivo.

    Praticamente i browser chiedono ogni secondo una risposta dal server che però dipende dalle variabili settate nella sua memoria. Quindi php risponde sempre, ma con dati generici che vengono aggiornati costantemente da casa a intervalli irregolari.

    Se invece un browser fa una richiesta specifica di dati particolari, Ajax li chiede al browser con una richiesta specifica, non quella generica di ogni secondo, ma non gli possono arrivare subito perchè il php non li ha e deve aspettare il risultato da casa.

    In effetti una risposta alla richiesta specifica il server la dà, penso, che è "", non avendo il server i dati richiesti in quel momento. Infatti ho provato anche con async: false e non si è bloccato lo script: quindi ha ricevuto "" e poi è andato avanti.

    Il js va avanti e ricomincia la richiesta generica di ogni secondo, e in una di queste il php ha aggiornato le variabili e quindi invia la risposta specifica invece di quelle generiche. Solo che può inviarla a un altro browser che fa la stessa richiesta generica...
    Cioè, se ci sono due browser che inviano ogni secondo un "action=dati", che sarebbe la richiesta generica, il php, quando ha recuperato i dati particolari richiesti da uno specifico browser, risponde con quei dati alla prima richiesta generica che gli arriva, non necessariamente quella del browser giusto però.

    Grazie comunque per aver tentato di capire.
    Ciao

  7. #7
    "la mia prima applicazione ajax-php"

    ah, ecco :-)

    "funziona perfettamente con un solo browser attivo"

    vabbè ma a parte che non capisco questo punto, ma visto che sei solo te a fare tutto, usa un browser solo.

    "Quindi php risponde sempre, ma con dati generici"

    php risponde con i dati che tu lo istruisci a esprimere.

    "Se invece un browser fa una richiesta specifica di dati particolari, Ajax li chiede al browser con una richiesta specifica, non quella generica di ogni secondo"

    Ajax non fa richieste "generiche": fa esattamente il tipo di richiesta che tu gli dici di fare. Questa distinzione fra "richiesta generica di ogni secondo" (a parte il fatto che come ti ho detto non ha senso) e "richiesta specifica di dati particolari" ogni non si sa quando, non è comprensibile: ajax fa le richieste dei dati che tu gli dici di richiedere, e solo di quelle e null' altro che di quelle.

    "In effetti una risposta alla richiesta specifica il server la dà, penso, che è "" "

    il server risponde con una echo: questa echo è quella che tu gli dici di dare e non altre (e anzi devi sempre darne una, in modo appunto da sapere lato client quando la richiesta del client ha ottenuto una risposta. esempio

    echo "";
    oppure
    echo 1;

    "Il js va avanti e ricomincia la richiesta generica di ogni secondo"

    Come ti dicevo non ha senso: bisognerebbe che tu mi ascoltassi un pochino; ajax manda una richiesta al server, e finchè il server non ha risposto con una echo, tu puoi inviargli quanti ajax ti pare da quellqa stessa finestra: non risponderà a nessuno di quelli finchè non ha evaso la prima risposta impilata sullo stack

    "Solo che può inviarla a un altro browser che fa la stessa richiesta generica"

    No: il server invia risposte solo ai browser che hanno lanciato una richiesta ajax: e a nessun altro. Che poi ogni browser avanzi la stessa richiesta e ottenga la stessa risposta, non vuol dire che la risposta dovuta ad uno arrivi ad un altro: vuol dire soolo che lo stesso tupi di richiesta è mandata da più istanze, e ogni istanza riceve rigorosamente la sua risposta (che sia eguale non deve dissimulare ai tuoi occhi il fatto che sono risposte diverse a contenuto identico: ma diverse).

    "risponde con quei dati alla prima richiesta generica che gli arriva, non necessariamente quella del browser giusto però"

    No scusami, ma non hai una sufficiente comprensione concettuale di ajax - nulla di male ma bisogna che ti convinci di questo aspetto: questa cosa che tu dici non esiste. Ogni browser ha un legame univoco con il server, e ogni risposta che un browser riceve è la risposta alla specifica domanda ajax che ha inviato in precedenza. Tu forse ti confondi perchè il contenuto delle risposte è identico, ma ogni browser riceve la SUA risposta.

    Browser 1: "server come ti chiami"?
    attesa
    Browser 2: "server come ti chiami"?
    attesa
    Browser 3: "server come ti chiami"?
    risposta a 1: "pippo"
    risposta a 2: "pippo"
    Browser 4: "server come ti chiami"?
    risposta a 3: "pippo"
    risposta a 4: "pippo"

    Tu vedi ogni volta "pippo" perchè la domanda è la stessa, e non avendo ben afferrato ancora il funzionamento di ajax, pensi che stia rispondendo a qualcun altro: non è così.

  8. #8
    A parte quanto detto sopra, tu lo sai vero che i server non sono tenuti a risponderti all' istante sol perchè tu li hai chiamati, ma con i tempi che decidono loro, secondo la velocità dei loro processori, secondo il carico dei loro buffer, secondo i client da evadere, e la congestione di rete (specie se rete domestica con una larghezza di banda magari modesta)?

    Congestione che tu stesso fai lievitare, insistendo a amndare richieste ogni secondo: ti risponderà sempre più lentamente, sempre più lentamente, e tu ti interrogherai sul come mai si ingenera il fenomeno che tu causi e non capirai come mai a te pare che risponda a qualcun' altro piuttosto che evadere in un battibaleno le

    numero_di_browser*richieste_al_secondo*60_secondi_ in_un_minuto

    richieste ajax che tu gli invii senza posa.
    Stai spammando te stesso. :-)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2006
    Messaggi
    52
    "vabbè ma a parte che non capisco questo punto, ma visto che sei solo te a fare tutto, usa un browser solo."

    Anche se fossi solo io a usarlo (che non l'ho mai detto), potrei comunque avere un browser attivo su un pc, un browser su un tablet o cell e un browser su un'altra postazione. Insomma serve multibrowser.


    "php risponde con i dati che tu lo istruisci a esprimere. [...] ajax fa le richieste dei dati che tu gli dici di richiedere, e solo di quelle e null' altro che di quelle.
    "
    Ma sì, certo. Ho detto generico e specifico solo per farti capire che sono due chiamate ajax distinte effettuate dallo stesso script; quella ogni secondo e una che parte con determinati eventi onclick.

    "il server risponde con una echo: questa echo è quella che tu gli dici di dare e non altre "

    Quindi se io ho:

    if ($_SESSION["getTemp"] != '' ) {
    echo "getTemp=" . $_SESSION["getTemp"];
    }

    e $_SESSION["getTemp"] è '' tu dici che il server non mi risponde '' anche se non c'è nessun echo '' ?
    E quindi la successiva chiamata ajax dello script non può avvenire perché non c'è risposta dal server? Invece avviene.


    "Che poi ogni browser avanzi la stessa richiesta e ottenga la stessa risposta, non vuol dire che la risposta dovuta ad uno arrivi ad un altro: vuol dire soolo che lo stesso tupi di richiesta è mandata da più istanze, e ogni istanza riceve rigorosamente la sua risposta (che sia eguale non deve dissimulare ai tuoi occhi il fatto che sono risposte diverse a contenuto identico: ma diverse)."

    Ma guarda che io ho capito. Sei tu che non hai capito quello che ho scritto.
    Non ho detto che il server risponde a casaccio. Ho detto che invia una risposta con dati sbagliati a un browser che gli ha fatto una richiesta.
    Cioè voglio individuare un solo browser a cui inviare quei dati e non il primo browser che mi fa la richiesta, dato che ne ho più di uno contemporaneamente.

    "No scusami, ma non hai una sufficiente comprensione concettuale di ajax - nulla di male ma bisogna che ti convinci di questo aspetto: questa cosa che tu dici non esiste. "

    E ancora... Ho capito benissimo come funziona!


    Se ho ad esempio:

    if ( $_REQUEST['action'] == "dati" ) {

    if ($_SESSION["manuale"] != '' ) {
    echo "manuale=" . $_SESSION["manuale"];
    $_SESSION["manuale"] = '';
    }
    else if ($_SESSION["getTemp"] != '' ) {
    echo "getTemp=" . $_SESSION["getTemp"];
    $_SESSION["getTemp"] = '';
    }

    }

    ogni volta che il server viene contattato e $_SESSION["manuale"] = '' mi risponde con l' echo "getTemp=" . $_SESSION["getTemp"];
    ma quella volta che ha recuperato i dati e quindi $_SESSION["manuale"] != '' allora mi risponde con echo "manuale=" . $_SESSION["manuale"];

    MA

    questa risposta la darà a qualsiasi richiesta Ajax che avrà $_REQUEST['action'] == "dati"

    E quindi se ho tre browser che mi richiedono $_REQUEST['action'] == "dati", il PRIMO che arriverà dopo che $_SESSION["manuale"] != '' riceverà
    echo "manuale=" . $_SESSION["manuale"];.
    Dopodichè non la riceverà nessun altro perché annullo la variabile.

    E il primo che arriva non è per forza quello che aveva fatto inizialmente la richiesta con l'altra chiamata Ajax.
    Comunque è chiaro che come hai detto tu, non hai capito nulla di come ho impostato la cosa.

    E per le richieste ogni secondo, sono da 100 byte ciascuna di solo testo, non mi pare proprio di mandare in affanno neppure un vetusto pentium3 o forse neppure un atom se è per quello. Comunque mi serve così per aggiornare la pagina in tempo quasi reale.
    Infatti non mi lamento della lentezza di risposta che non c'è per niente, anzi, ma della risposta sbagliata non per colpa di ajax o del php, ma appunto del programma che ho scritto e che devo puntualizzare meglio.

    Comunque forse ho risolto: domani farò inserire un ulteriore request nel browser che invia la richiesta e fino a quando non riceverà la risposta con i dati attesi, non annullerà quella variabile.
    Il php quando avrà i dati da casa risponderà solo al browser che farà la richiesta con quella variabile in più e agli altri no.
    Penso che funzionerà.

  10. #10
    "E quindi la successiva chiamata ajax dello script non può avvenire perché non c'è risposta dal server? Invece avviene."

    Chiamata e risposta sono due cose diverse. La chiamata la fa il client. La risposta la dà il server. La chiamata avviene, perchè la spara il client: se il tuo javascript lancia un milione di chiamate al server, partono tutte: è il server che (ovviamente) non risponde nei tempi da te previsti.

    "Ma guarda che io ho capito. Sei tu che non hai capito quello che ho scritto."
    Ti dirò, scrivi in maniera assai confusa - non avertene a male ma le spiegazioni che dai sono un viluppo assai oscuro.

    "E per le richieste ogni secondo, sono da 100 byte ciascuna"
    per la verità è possibile impallare un server con 10 bytes: while(1){}

    "Comunque è chiaro che come hai detto tu, non hai capito nulla di come ho impostato la cosa."
    E' anche chiaro, come hai detto tu, che sei alla tua prima applicazione ajax.

    "E ancora... Ho capito benissimo come funziona!"

    ottimo. Allora auguri! ciao

    ps ajax non usa $_REQUEST come lo usi te

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.