Ajax con risultato si/no

  • Creatore Discussione Creatore Discussione bubino8
  • Data di inizio Data di inizio

bubino8

Utente Attivo
28 Apr 2017
360
20
28
32
BZ
Buongiorno,

tramite ajax vado a recuperare la lista dei clienti in base alla ricerca.
un volta recuperati i dati vado a stamparli in un <div>
Codice:
success: function(restituisci){
                var separo = restituisci.split("|-|");
                var quantinew = separo[1];
                var quantiold = $("input[id=nrricerca]").val();
                if(quantiold != quantinew){
                    $("div#risultato").html(separo[0]);
                }
            },
quando "quantiold" e "quantinew" sono appunto diversi mi stampa correttamente il contenuto separo[0].
quanto è = non dovrebbe eseguire nulla o sbaglio? Invece mi va a svuotare il <div>

Qualcuno sa come fare?

Grazie
 
Ciao, non so se hai già risolto, comunque sia senza vedere la pagina in esecuzione è difficile capire dove può essere il problema, anche perché lo script che hai postato non può essere testato se non all'interno del suo contesto.

Posso solo fare delle supposizioni.
Fermo restando che non ci sono errori di sintassi, anche perché tu stesso dici che in alcuni casi ottieni il risultato aspettato, si può stabilire che quella condizione sta funzionando ma probabilmente, nel presunto caso in cui i due valori siano uguali, questi in realtà non lo sono, producendo un falso positivo. Tale condizione probabilmente risulta sempre "vera".

In casi del genere è possibile risalire alla causa con un semplice debug. Può esserti utile inserire qualche console.log con cui verificare (attraverso la console del tuo browser) i valori restituiti dalle diverse variabili o espressioni in gioco.

Ad esempio, potresti inserire prima della condizione (cioè prima di quel tuo if), un'istruzione di questo tipo:
Codice:
console.log( '(', quantiold, '!=', quantinew, ') =>', (quantiold != quantinew) );

Ora non dovrai fare altro che aprire la console del tuo browser (in genere puoi farlo premendo F12 ed eventualmente selezionando la scheda "Console") quindi eseguire il tuo script e vedere cosa ti salta fuori.

I valori restituiti nella console ti potranno aiutare a risalire al problema.


PS: Qualche consiglio...
Questo selettore $("input[id=nrricerca]"), sebbene sia sintatticamente corretto, è un modo "sporco" di scrivere più semplicemente $("#nrricerca").
Allo stesso modo anche in questo caso $("div#risultato"), in cui il nome del tag è ridondante, si può usare una forma più pulita (e ottimale) specificando semplicemente l'id $("#risultato").
 
Ciao graze per la risposta.
Potresti spiegarmi meglio come funziona e dove vedere i risultati sulla console?

Grazie per avermi fatto notare $("input[id=nrricerca]") adesso che ci penso essendo id sono già univoci (almeno dovrebbero esserlo).


Grazie
 
Devo ancora risolvere ma mi stanno già aiutando un sacco a capire.
Prima per controllare i valori facevo alert ed era un caso adesso con la console faccio velocissimo i test.

Spero di riuscire a risolvere altrimenti pazienza

Grazie ancora
 
Potresti spiegarmi meglio come funziona e dove vedere i risultati sulla console?
Devo ancora risolvere ma mi stanno già aiutando un sacco a capire.
Bene, quindi sei riuscito a vedere i risultati sulla console?

Spero di riuscire a risolvere altrimenti pazienza
Con l'istruzione che ti ho indicato, cosa viene scritto sulla console?
Per caso ti salta fuori qualche valore undefined?

Eventualmente posta qui quel log.
 
Ciao sisi ho capito come fare non avevo cancellato la cache.

Caspita cosi a parole non riesco a spiegare:D.
Vedo se riesco a caricarlo per far vedere come sarebbe il funzionamento.

Scrivo appena è caricato così a tempo perso magari mi aiuti a dare un'occhiata.
 
Eccomi non badare troppo al CSS o copiato solo la parte interessata alla buona.

Qui è la pagina base
http://bubino.it/ricerca/index.php

Qui già con un parametro di ricerca(ho fatto un po di casino con js solo per fargli l'effetto della scrittura).
http://bubino.it/ricerca/index.php?cerca=test funzioni ricerca

In pratica voglio fare che quando i risultati (numero di clienti trovati) solo = a quelli precedenti non ricarica il contenitore <div>
Magari mi sono chiarito un po di più facendo questo esempio.
Se riesci ad aiutarmi ti ringrazio molto.

Ciao
 
Credimi, non capisco che devo fare su quella pagina.
Puoi descrivermi un situazione di test (magari con i due casi in cui ottieni o no il risultato aspettato) con tutti i dettagli dei passaggi che devo effettuare per poter riprodurre il problema?
 
Ciao perdonami sono un po imbranato a spiegarmi o_O.
Dunque:
Vai al sito http://bubino.it/ricerca/index.php e inserisci manualmente nella ricerca il testo "test funzioni ri". Mentre scrivi ovviamente i clienti vengono scartati.

Quando arriverai ad inserire da "test funzioni " fino a "test funzioni ri" i risultati di ricerca saranno sempre 5. A quel punto il contenitore dove vengono stampati i clienti non dovrebbe ricaricarsi invece lo fa.

Se mi sono spiegato ancora peggio fammi sapere, che se hai tempo ti creo un archivio e facciamo prima:D.

Grazie ancora
 
Ciao perdonami sono un po imbranato a spiegarmi o_O.
Figurati, cerchiamo magari di fare un passo alla volta perché ancora non mi sono chiari i vari passaggi per riprodurre il problema.

Vai al sito http://bubino.it/ricerca/index.php e inserisci manualmente nella ricerca il testo "test funzioni ri". Mentre scrivi ovviamente i clienti vengono scartati.
Sono su quella pagina, vedo la texbox e i vari pulsanti. Sotto, vedo già una ventina di risultati anche senza digitare nulla. Questo è normale?

Seleziono la texbox e inizio a digitare la stringa, ma non vedo alcun aggiornamento di risultati. La pagina resta statica. Cosa intendi quindi per " i clienti vengono scartati"?

Quando arriverai ad inserire da "test funzioni " fino a "test funzioni ri" i risultati di ricerca saranno sempre 5. A quel punto il contenitore dove vengono stampati i clienti non dovrebbe ricaricarsi invece lo fa.
I risultati sono sempre una ventina e non noto comunque nessun ricaricamento.

Tieni presente che in console mi vengono segnalati degli errori:
Caricamento non riuscito per lo <script> con sorgente “http://localhost/panel/js/index.js”.
Caricamento non riuscito per lo <script> con sorgente “http://localhost/panel/js/select.js”.
Caricamento non riuscito per lo <script> con sorgente “http://localhost/panel/js/mask.js”.
Caricamento non riuscito per lo <script> con sorgente “http://localhost/panel/js/search_clienti.js”.
Suppongo che il sistema non mi stia funzionando proprio perché mancano questi file. Ovviamente su questa pagina online dovresti modificare i percorsi che tu stai usando per il loacalhost.

se hai tempo ti creo un archivio e facciamo prima
Per ora prova a correggere quei percorsi, vediamo se si riesce a testare online.
 
Ciao, ti ho mandato in privato il link.

Sono su quella pagina, vedo la texbox e i vari pulsanti. Sotto, vedo già una ventina di risultati anche senza digitare nulla. Questo è normale?
SI è normale se non c'è nessuna ricerca mostra tutti gli utenti.

Seleziono la texbox e inizio a digitare la stringa, ma non vedo alcun aggiornamento di risultati.
se non c'è nessun cliente che corrisponda al testo inserito nella text, mostra "Non è stato trovato nessun cliente".

Se hai bisogno di altro chiedi pure e cerco di spiegermi.

Grazie
 
Ciao, ho dato uno sguardo al tuo progetto e, senza offesa, ho visto un bel po' di pasticci a prescindere da ciò che stai chiedendo qui.
Sarò breve
quando "quantiold" e "quantinew" sono appunto diversi mi stampa correttamente il contenuto separo[0].
quanto è = non dovrebbe eseguire nulla o sbaglio? Invece mi va a svuotare il <div>
Il div probabilmente viene svuotato perché prima di quella chiamata AJAX c'è questa roba:
Codice:
$("div#lista_clienti").hide();
Ora, nel tuo progetto questo id (#lista_clienti) è applicato ad ogni div, cioè ogni elemento del risultato. Già il fatto di usare più volte questo id su diversi elementi del documento è un gravissimo e grossolano errore, che può comportare risultati imprevedibili.

Durante l'esecuzione del sistema poi ho notato che anche l'intero contenitore dei risultati (quello con id #clienti) viene duplicato, e qui un pasticcio dopo l'altro.

Ricorda, gli id devono necessariamente essere univoci.

Ma a parte questo, anche se tu riuscissi nell'intento, mi spieghi dove sta il problema se i risultati vengono ricaricati?
Codice:
In pratica voglio fare che quando i risultati (numero di clienti trovati) solo = a quelli precedenti non ricarica il contenitore <div>
Forse perché questo crea uno "sfarfallio" durante il ricaricamento? O cosa?

Anche supponendo di riuscire a evitare il caricamento quando il numero dei risultati attuali è uguale a quello della nuova ricerca, questo potrebbe comunque portare ad un errore se ad esempio il numero dei risultati dovesse corrispondere ma i risultati stessi sono magari diversi. Anche se le probabilità che succeda sono limitate, potrebbe comunque succedere. Non pensi?
A quel punto la cosa sarebbe da organizzare valutando meglio anche questi particolari casi.

A parte questo, non voglio demoralizzarti, però molte parti nel resto dello script le trovo ridondanti e alcune cose mi appaiono contorte.
Non saprei come aiutarti senza riprendere da zero il tutto ma sinceramente non è una cosa di cui mi voglio occupare più di quanto posso fare nel cercare di consigliarti qualcosa in questa discussione. Per cui, mi spiace, ma devo dirti che il mio supporto non può andare oltre il semplice aiuto qui sul forum.

Chiaramente se qualcun altro volesse intervenire è sempre bene accetto.
Buon proseguimento.
 
Ciao buongiorno,
Ti ringrazio tantissimo per il supporto e tutte le dritte/segnalazioni che mi hai fatto.

Forse perché questo crea uno "sfarfallio" durante il ricaricamento? O cosa?
esattamente è fastidioso.

Anche supponendo di riuscire a evitare il caricamento quando il numero dei risultati attuali è uguale a quello della nuova ricerca, questo potrebbe comunque portare ad un errore se ad esempio il numero dei risultati dovesse corrispondere ma i risultati stessi sono magari diversi. Anche se le probabilità che succeda sono limitate, potrebbe comunque succedere. Non pensi?
Se eseguo una query come potrebbe restituire un valore diverso?

A parte questo, non voglio demoralizzarti, però molte parti nel resto dello script le trovo ridondanti e alcune cose mi appaiono contorte.
Ci mancherebbe fai benissimo e mi stimoli a studiare e trovare altre soluzioni.

Grazie ancora per la disponibilità e buon proseguimento a te.
 
Giorno, chiarisco giusto questo punto:
Se eseguo una query come potrebbe restituire un valore diverso?
Probabilmente non sono riuscito a spiegarmi.
Provo a farti un esempio:
Mettiamo il caso che nel tuo db ci siano i seguenti record:
- Pippo Franco
- Pippo Baudo
- Pippo Inzaghi
- Franco Franchi
- Franco Svizzero

Ora, accedo alla tua pagina e vedo tutti quei risultati finché il campo di ricerca resta vuoto.
Inizio quindi a scrivere nel campo e arrivo a scrivere "Pippo".
I risultati ora sono 3, giusto?
- Pippo Franco
- Pippo Baudo
- Pippo Inzaghi

Mettiamo il caso che adesso inserisco un altro valore nel campo ma supponiamo che io non vada a digitarlo direttamente, faccio invece un copia/incolla, per cui sostituisco per intero il valore "Pippo" col valore "Franco".
Cosa succede secondo te?
I risultati sono sempre 3, e dovrebbero essere i seguenti:
- Pippo Franco
- Franco Franchi
- Franco Svizzero

Ovviamente non corrispondono ai precedenti (o quantomeno non tutti) anche se il numero di risultati è rimasto uguale; per cui se in questa situazione tu vai a bloccare l'aggiornamento, continueresti a vedere i 3 risultati precedenti (che non corrispondono alla query di ricerca). Giusto?

Cosa significa questo, che in alcuni casi, come può essere questo semplice esempio, non puoi fare affidamento solo al fatto che il numero di risultati non è variato; certo, questo può essere usato come condizione iniziale ma, per avere una certezza che si tratti degli stessi identici risultati (così da evitare l'aggiornamento) dovrai confrontarli uno per uno.

Chiaramente in questo esempio ho considerato un copia/incolla di un'intera parola ma potrebbe benissimo capitare anche digitando una singola lettera e poi sostituendola con un'altra.
Infatti se inizio a digitare "p" salteranno sempre fuori i primi 3 risultati (già visti nell'esempio); se poi seleziono quella "p" e ci sovrascrivo una "f", cosa pensi che avvenga? La stessa situazione dell'esempio precedente.

In sostanza voglio dire che non è così improbabile che si possano verificare delle situazioni del genere, sarebbe quindi opportuno evitare la comparsa di risultati sfalsati; quindi lasciare semplicemente che si aggiornino, anche quando restano uguali, oppure elaborare un sistema di verifica più affidabile.

Però, a conti fatti, questo "problema" che lamenti è forse trascurabile confronto agli "errori" nel resto del sistema.

Ti dirò di più, probabilmente lo sfarfallio può essere risolto senza bloccare l'aggiornamento dei risultati ma rielaborando meglio lo script così da evitare, ad esempio, di nascondere quegli elementi prima della chiamata AJAX; infatti normalmente se vai a rimpiazzare degli elementi con degli altri praticamente uguali, non dovrebbe notarsi alcuna discontinuità nella visualizzazione.

Tuttalpiù potresti nasconderli con un delay in modo da mantenerli visibili per qualche attimo prima dell'eventuale scomparsa.
Sono giusto delle idee, poi vedi tu che fare.
 
Capito.
Vista la confusione nello script stò optando per una funzione diversa che va solamente a nascondere gli element che non contengono il testo, invece di andare a rifare ogni volta la query e riportare i risultati.


Grazie per i consigli
 
Visti i tuoi consiglio ho fatto un prova differente.

PHP:
$(document).ready(function(){
                $('#showricercaclienti').bind('input', function() {
                    $("#clienti").find("div.pageuser").each(function(){
                        if($("#showricercaclienti").val().length >= 2 ){
                            if( $(this).is(":contains('"+ $("#showricercaclienti").val() + "')") ){
                                $(this).css('display','');
                            }else{
                                $(this).css('display','none');
                            }
                        }else{
                            $(this).css('display','');
                        }
                    });
                });
            });
In questo modo facendo una query recupero tutta la lista dei clienti, controllo la ricerca e se non ce il testo nella box del cliente imposto "display:none".

L'unico problema è che controlla anche se i caratteri sono MAIUSCOLI o minuscoli.
Sai dirmi come posso modificare?


Grazie
 
Risolto sempre complicandomi la vita e in modo grezzo ma funziona.
PHP:
<span style="display:none"><?php echo strtolower($nomecliente); ?></span>
faccio in php cosi e bom.
 

Discussioni simili