Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    jQuery - Gestire chiamate POST e GET con callback.

    Buongiorno a tutti, dato il mio problema precedentemente irrisolto mi sono messo sotto a leggiucchiare un pò in giro, trovandomi di fronte alla verità che nel complesso jquery come framework alleggerisce molto il mio lavoro sul progetto che sto realizzando, quindi mi sono armato di santa pazienza e ho iniziato a lavorarci.

    Ed immancabili ecco i primi intoppi :P

    Devo gestire una sorta di Box contenente i messaggi inseriti dall'utenza, quindi tramite la funzione $.ajax ho gestito nell' OnLoad della pagina una chiamata in GET che recupera i dati da una pagina in php, restituendo come risultato il nome e il messaggio di ogni utente degli ultimi 20 minuti.

    codice:
    function getMEX() {
    $.ajax( {
      type:'GET',
      data:'luogo=3',
      url:'motore_prova.php',
      async: true,
      success:function(msg) {
    $("#chat").append(msg);
    }
    } );
    }
    Ora, quello di cui ho bisogno è far si che, quando l'utente invia un messaggio tramite il form sotto questi possa visualizzare solo il il suo messaggio nuovo OLTRE a quello già stampati a video, quindi sempre tramite $.ajax faccio partire una chiamata POST che invia il nome e il messaggio ad una pagina che inserisce i dati nel database.

    codice:
    function invioMEX() {
    var stringa = $("#datichat").serialize();
    $.ajax( {
      type:'POST',
      data:stringa,
      url:'invioazioni.php',
      async: true,
      success:function(msg) {
    alert (msg + 'inviata');
    }
    } );
    }
    Quello che mi manca da inserire ora è la possibilità di stampare il messaggio inserito dall'utente oltre a quelli che già ci sono fino ad un massimo di 20 minuti fa, e quindi non far aggiornare di nuovo tutta la chiamata (stampando così oltre a quelli vecchi ancora quelli vecchi con in più il nuovo messaggio). Quello che non riesco a capire è come gestirmi nella funzione "success: function(msg)" i dati restituiti dalla chiamata singolarmente (e non in blocco).

    Qualcuno sa aiutarmi gentilmente?

  2. #2
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Ciao, devi aggiungere a $("#chat").... quello che restituisce invioMEX()??

    msg di invioMex() cosa torna ? un array?

    Non ho capito se il problema e' prendere un singolo dato dell'array o se non riesci ad aggiungere l'html generato in $("#chat")

  3. #3
    Originariamente inviato da m4rko80
    Ciao, devi aggiungere a $("#chat").... quello che restituisce invioMEX()??

    msg di invioMex() cosa torna ? un array?

    Non ho capito se il problema e' prendere un singolo dato dell'array o se non riesci ad aggiungere l'html generato in $("#chat")
    inserendo il $("#chat").append(msg) come callback all'invioMEX(); effettivamente mi posta il risultato nuovo dopo i messaggi già stampati (e questo risolve solo parte del mio problema), questo perchè mi rimane comunque il problema che gli altri utenti non visualizzerebbero il messaggio nuovo appena inserito.

    Quello che ho bisogno di riuscire a fare (come facevo nel codice vecchio) è identificare l'id del messaggio stampato, poi inviare quell'id nella query che recupera i messaggi e fargli controllare se ci sono id superiori a quello, se ci sono quindi aggiornare il div #chat e stamparli sotto gli altri.

    Per spiegarmi meglio:

    - Nella tabella del database ho 10 messaggi con id 1,2,3 etc, crescente sino a 10. Nel div #chat con l'onLoad della pagina si caricano questi primi 10 messaggi, poi un utente inserisce un nuovo messaggio che ha ovviamente id 11, io utente che sono già nella pagina devo vedermi comparire il messaggio con id 11 sotto agli altri senza dover ricaricare tutta la pagina.

    setTimeout è la funzione che mi serve, quello che mi serve capire è come estrapolare l'id dell'ultimo messaggio che ho stampato a video, inviarlo alla pagina di controllo tramite get e dirgli di stampare solo i messaggi con id superiore a quello.

    So che è complicato da spiegare scritto, ma è il classico funzionamento di una chat o di uno shoutbox, dove ti compaiono solo i nuovi messaggi a video degli utenti senza ricaricarli tutti quanti.

  4. #4
    Utente di HTML.it L'avatar di m4rko80
    Registrato dal
    Aug 2008
    residenza
    Milano
    Messaggi
    2,654
    Quando l utente inserisce il messaggio suo al posto di accodare il suo messaggio( senza sapere se ce ne sono di nuovi quindi) ricrei tutta la lista dei messaggi.
    Nella pagina php potresti secondo me:
    - inseire il suo messaggio a db
    - sapere quindi il record inserito
    - estrarre tot messaggi calcolando ad esempio: where id <= ultimo id inserito con order desc
    - al massimo ti ordini l'array sempre da php

    - rigeneri a sto punto $('#chat').hml(msg)

    ps ho messo .html() per esempio ...

  5. #5
    Quello che dici tu è giusto, e mi servirebbe se volessi ricaricare l'intera quantità di messaggi. E funzionerebbe unicamente facendo comparire poi in blocco, tutti i messaggi inseriti prima di quello dell'utente. Mentre se io volessi aggiornare costantemente la pagina ogni 2 secondi, facendo comparire se ce ne sono messaggi nuovi inseriti da altri user, all'utente che in quel momento guarda la pagina?

    esempio.

    Io sono utente A, in questa pagina ci sono anche utente B e C.

    Utente B e C scrivono messaggi, che io però visualizzerei con il tuo metodo unicamente quando io utente A andrei ad inserire un messaggio mio, mentre con un setTimeout o setInterval potrei far aggiornare ogni TOT la pagina, quello che vorrei però è che mi caricasse solo i messaggi non ancora visti da me che sono l'utente A e non tutto il blocco di messaggi.

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