Ajax con risultato si/no

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
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
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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").
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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?
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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.
 

WmbertSea

Moderatore
Membro dello Staff
MOD
28 Nov 2014
432
73
28
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.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
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
Autore Titolo Forum Risposte Data
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
motleyrulez Ricerca filtro con Ajax PHP 1
max1974 [Javascript] Grafico chartjs con dati da J.ajax Javascript 3
Domenico_Falco1 Rendere dinamico un sito web con chiamate ajax e php e variabili json PHP 12
WorldWideWeb Ajax POST con risposta JSON Ajax 2
M leggere con jquery/ajax in una function javascript record di database sql server Javascript 0
D [Javascript] pulsanti per comandi shell con php e ajax Ajax 7
X Problema con jquery e ajax jQuery 2
Axis18 Creare una barra di avanzamento con $.ajax Ajax 7
G [Javascript] Problema parametro passato con ajax Javascript 4
paloppa [PHP] paginazione con ajax PHP 1
L Aggiungere contenuto con ajax durante lo scroll jQuery 1
otto9due Risposta ajax -> json con php Ajax 3
bubino8 [PHP] split con ajax non funziona PHP 7
A Visualizzare div quando le immagini sono state uploadate con successo (Ajax) Ajax 0
D Sono disperato: Menu select dinamici con Ajax e PHP PHP 1
D Sono disperato: Menu select dinamici con Ajax e PHP Ajax 2
T Passaggio dati con ajax ad altra pagina Ajax 6
T [PHP] Passaggio dati sensore con ajax e exec, lento! PHP 0
V Collegamento metodo$.ajax con file php jQuery 10
M Aggiornamento pagina php con ajax Ajax 2
B Upload immagine con ajax post Ajax 5
F Aggiornare marker su mappa google con una funzione ajax richiamata al cambio di una select Ajax 2
A Forzare reindirizzamento con ajax Ajax 0
A metodo css("attributo", "valore") con ajax jQuery 1
M Richiesta ajax con autenticazione base non funziona ! Ajax 0
A progressbar con conteggio record da una chiamata Ajax Ajax 1
M Ajax array con immagini Ajax 1
P Problema creazione form con ajax PHP 1
I Registrazione con Ajax Ajax 1
I Parte di una registrazione con ajax Javascript 1
A problema con chiamata ajax Ajax 1
A Ricerca con autocompletamento ajax Javascript 2
P Problema refresh pagina con Ajax... Ajax 15
K [risolto] passaggio variabile a pagina php con ajax Ajax 6
L Recupero dati form in tabella e invio con ajax. Problemino jQuery 1
J Forum php con pop ajax che dice che sono offline PHP 0
S multi request ajax con jquery jQuery 2
D Aiuto Ajax da PHP con codifica json Ajax 0
P Non funziona il controllo dati con ajax PHP 4
S problema con ajax semplice login script Javascript 8
P Lettura/Scrittura Database con AJAX Ajax 10
G php asincrono con ajax 2 campi di verifica PHP 1
A Problema recupero valori da select con chiamata ajax Ajax 1
M GET Sql con Ajax Javascript 1
ciccio1892 Select concatenate con Ajax inviare scelta utente tramite post insieme ad altri dati form PHP 3
D Aiuto con Ajax e pagine incluse nei DIV Ajax 1
S Gallery con Tag foto: problema doppia chiamata ajax con JQuery jQuery 2
V scambio dati js php con ajax Ajax 2
T Problema con Ajax. Elementi duplicati Ajax 1

Discussioni simili