Struttura $.ajax

max1974

Utente Attivo
7 Mar 2013
107
0
16
Ragazzi scusate una domanda forse anomala mi stavo ponendo un dubbio (forse pp mentali) in una pagina
ho ad esempio 10 chiamate $.ajax che puntano tutte allo stesso file (file1.php) passando un parametro es: "query1","query2","query3"....."query10"nel file php ho if "query1" else if "query2" else if "query3"....... ed eseguo le query che di volta in volta necessito....ora la domanda è sarebbe meglio strutturalmente/logicamente/per correttezza o che ne so' forse anche ai fini di velocita
avere cada chiamata $.ajax un file php diverso evitando pure di passare quel parametro o no ???

qualcuno che mi delucida per favore.
Grazie.
 

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Se le chiamate sono (o possono essere) fatte simultaneamente, e la mole di dati è relativamente contenuta, può essere più ottimale eseguire una sola chiamata passando i dati in post al tuo unico php (ammesso che questo sia comunque ben organizzato per accoglierli), magari utilizzando una struttura ad array in modo da poterli opportunamente "smistare" e restituirne di conseguenza le relative risposte in un unico output, magari usando una struttura dati digeribile poi dal tuo javascript/jquery, ad esempio un csv o un json o un xml o qualsiasi altro formato organizzato in modo adeguato a ciò che ti serve ottenere.

Probabilmente in termini di velocità questo potrebbe sveltire il processo di passaggio dei dati perché viene limitato a priori il numero di transizioni tra client e server e viceversa, però la questione sarebbe comunque da valutare nel dettaglio in base ai vari fattori della tua reale situazione: quantità di traffico prevista, mole di dati per transizione, massima quantità presunta di chiamate effettuate contemporaneamente, tipologia dell'ambiente server e sue capacità di elaborazione dati, ecc.

Cioè, se parliamo del sito dell'ortolano sotto casa o di quello che vende le magliette, per cui gli stai realizzando una paginetta ecommerce per organizzarsi le vendite online (è un esempio tra mille), IMHO non ha senso spenderci troppo tempo ad elaborare cose relativamente complesse. A quel punto puoi lasciare le tue 10 chiamate ajax a quel file che te le smista, e che anche se fossero moltiplicate per 10 utenti alla volta, un normale server con un generico servizio hosting multidominio potrebbe tranquillamente riuscire a soddisfare il tipo di esigenza.
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
Ti do alcune informazioni. Le query so tutte indicizzate e filtrate e per questo sono abbastanza veloci, ma parliamo in ordine di numeri di una webapp che potrebbe essere utilizzata contemporaneamente anche da centinaia di persone. Il server dovrò sceglierlo non appena terminata, (se anche su questo sai darmi info lo terrò presente ma considera che lavorerà in intranet privata e server dedicato) come numero di record per tabella si prevedono circa 30 record a utente/mese perciò un migliaio di record al mese (la tabella maggiore), ma non è che tutte le chiamate vadano su questa tabella. Credi che unica chiamata con suddivisione dei dati in un multiarrai unico possa velocizzare il tutto???
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
ti suggerisco di scrivere il codice in maniera semplice in modo da semplificare la manutenzione/upgrade successiva
sono molto favorevole ad avere uno script unico che risponde a chiamate ajax diverse quando le risposte siano facili da gestire
il tempo di esecuzione dello script non é certo influenzato dal numero di parametri che riceve
ma dal lavoro che deve compiere per generare la risposta e dalla quantità di dati che ritorna
questo tempo lo avresti con 1 script unico o differenziando gli script
ripeto non starei a cercare sofismi per "risparmiare" il nulla, cercherei solo di scrivere un codice semplice
 

max1974

Utente Attivo
7 Mar 2013
107
0
16
Grazie Marino, il mio modus operandi solitamente è il seguente...dimmi cosa ne pensi.
PHP:
$.ajax({
                 url:"../php/my.php",
                 method:"POST",
                 data:{User_id:sessionStorage.getItem("User_id")},
                 dataType:"Json",
                 success:function(data){
                    if(data.PERC.status == 'success'){
                        $(".badge-perc").show();
                        $(".badge-perc-add").hide();
                      }
                    else if(data.PERC.status == 'error'){
                        $(".badge-perc").hide();
                        $(".badge-perc-add").show();
                      }
                    if(data.TELE.status == 'success'){
                        $(".badge-tele").show();
                        $(".badge-tele-add").hide();
                      }
                    else if(data.TELE.status == 'error'){
                        $(".badge-tele").hide();
                        $(".badge-tele-add").show();
                      }
                    if(data.USERS.status == 'success'){
                        $(".badge-users").html(data.USERS.iTotalRecords);
                        $(".badge-users").show();
                      }
                    else if(data.USERS.status == 'error'){
                        $(".badge-users").hide();
                      }

                 },
            });
MY PHP FILE
Codice:
<?php

include "db_connect.php";

$connect = OpenCon();

  $query = "SELECT * FROM tb_1 WHERE id_user = '".$_POST["User_id"]."' and badge = 1";
                if (!mysqli_query($connect, $query)) {
                  $log_errore = new Errorlog();
                  $log_errore->scrivi('|cod=07.1|'.mysqli_error($connect).'|'.$query);
                  $Values['PERC']= ['status' => 'error',
                             'Message' => 'Errore 07.1 Contattare Amministratore di sistema'];
                }
                else {
                  $result = mysqli_query($connect, $query);
                  if ($result->num_rows > 0) {
                     while($row = $result->fetch_assoc()) {
                           $data[]=$row;
                           }
                     $Values['PERC'] = ['status' => 'success',
                                'Message' => "Elaborazione Avvenuta con Successo",
                                'iTotalRecords' => count($data),
                                'aaData' => $data];
                  }
                  else
                  {
                    $Values['PERC'] = ['status' => 'error',
                               'Message' => 'Nessun Dato Elaborato'];
                  }
                }
      $query = "SELECT * FROM tb_2 WHERE id_user = '".$_POST["User_id"]."' and badge = 1";
                if (!mysqli_query($connect, $query)) {
                  $log_errore = new Errorlog();
                  $log_errore->scrivi('|cod=07.2|'.mysqli_error($connect).'|'.$query);
                  $Values['TELE'] = ['status' => 'error',
                             'Message' => 'Errore 07.2 Contattare Amministratore di sistema'];
                }
                else {
                  $result = mysqli_query($connect, $query);
                  if ($result->num_rows > 0) {
                     while($row = $result->fetch_assoc()) {
                           $data[]=$row;
                           }
                     $Values['TELE'] = ['status' => 'success',
                                'Message' => "Elaborazione Avvenuta con Successo",
                                'iTotalRecords' => count($data),
                                'aaData' => $data];
                  }
                  else
                  {
                    $Values['TELE'] = ['status' => 'error',
                               'Message' => 'Nessun Dato Elaborato'];
                  }
                }
      $query = "SELECT * FROM tb_3 WHERE id_new = 1";
                if (!mysqli_query($connect, $query)) {
                  $log_errore = new Errorlog();
                  $log_errore->scrivi('|cod=07.3|'.mysqli_error($connect).'|'.$query);
                  $Values['USERS'] = ['status' => 'error',
                             'Message' => 'Errore 07.3 Contattare Amministratore di sistema'];
                }
                else {
                  $result = mysqli_query($connect, $query);
                  if ($result->num_rows > 0) {
                     while($row = $result->fetch_assoc()) {
                           $data[]=$row;
                           }
                     $Values['USERS'] = ['status' => 'success',
                                'Message' => "Elaborazione Avvenuta con Successo",
                                'iTotalRecords' => count($data),
                                'aaData' => $data];
                  }
                  else
                  {
                    $Values['USERS'] = ['status' => 'error',
                               'Message' => 'Nessun Dato Elaborato'];
                  }
                }
echo json_encode($Values);
CloseCon($connect);

?>
 

marino51

Utente Attivo
28 Feb 2013
2.912
162
63
Lombardia
JavaScript:
        if(data.PERC.status == 'success')
..
        else if(data.PERC.status == 'error')
se le condizioni sono 2, perché ripetere l' if ?

in caso di errore, é sicuro il panico generale perché non si conosce la causa, inserisci sempre
JavaScript:
            error:   function() { .... }
 
  • Like
Reactions: max1974

WmbertSea

Utente Attivo
28 Nov 2014
178
27
28
Credi che unica chiamata con suddivisione dei dati in un multiarrai unico possa velocizzare il tutto???
Potrebbe ma concordo con marino
non starei a cercare sofismi per "risparmiare" il nulla, cercherei solo di scrivere un codice semplice
Se l'organizzare i dati in un array, e fare un'unica chiamata, ti permette anche di avere un codice pulito e semplice da gestire, allora sì, altrimenti lascia pure le diverse chiamate.

Concordo comunque sul fatto di avere un unico script lato server.

Il server dovrò sceglierlo [...] se anche su questo sai darmi info
Non saprei ma per questo c'è una sezione apposita sul forum, potresti rivolgere lì la tua richiesta :)
 
  • Like
Reactions: max1974

max1974

Utente Attivo
7 Mar 2013
107
0
16
Grazie a tutti mi avete dato delle info molto utili.. siete veramente fortissimi :):):):):):):):):):):)