Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258

    Applicare replace sono se...

    Salve, mi sto imbattendo in un problema, al quanto fastidioso. In pratica prelevo da un database delle date in questo formato : 2015-05-22, poi tramite questa funzione li trasformo "italiano":
    codice:
    function date2ita(data) {
        return data.replace(/(\d{4}).(\d{2}).(\d{2})/, "$3.$2.$1");
    }
    Il problema sorge quando la funzione cerca di replicare un valore vuoto, e mi restituisce:
    Uncaught TypeError: Cannot read property 'replace' of undefined

    Come potrei dire alla funzione di applicare il replace solo se il valore da cambiare esiste?

    Oppure mi consigliate qualche altra soluzione?

    Grazie

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    codice:
    function date2ita(data) {
    if(data.length>0){
        return data.replace(/(\d{4}).(\d{2}).(\d{2})/, "$3.$2.$1");
    }
    }
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Se vedi quell'errore significa che data non è un parametro con un valore vuoto ma una parametro non definito. Assicurati di passare in input la data quando effettui una chiamata a questo metodo, se non sei in possesso della data semplicemente non richiami questo metodo.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Quote Originariamente inviata da cavicchiandrea Visualizza il messaggio
    codice:
    function date2ita(data) {
    if(data.length>0){
        return data.replace(/(\d{4}).(\d{2}).(\d{2})/, "$3.$2.$1");
    }
    }
    Prova ma mi da sempre lo stesso errore.
    Quote Originariamente inviata da Vindav Visualizza il messaggio
    Se vedi quell'errore significa che data non è un parametro con un valore vuoto ma una parametro non definito. Assicurati di passare in input la data quando effettui una chiamata a questo metodo, se non sei in possesso della data semplicemente non richiami questo metodo.
    Il problema e che estraggo i dati i questo modo:

    codice:
     var id_turno_s = "1"; //varia 
    $.ajax({
                    type: 'POST',
                    url: "http://sito.com",
                    data: dati,
                    dataType: 'json',
                    success: function(data){
                        $.each(data, function(key, value){
                            if( value.id_ass == id_s || value.id_turno == id_turno_s){
                                 // Dettaglio turno   
                                $("#giorno_r").val(date2ita(value.giorno));
                                $("#tipo_serv_r").val(value.tipo_serv);
                                $("#orario_r").val(value.orario);
                                $("#note_r").val(value.nota);
                                $("#ore_stra_r").val(value.ore_stra);
                                //Dettaglio assenza
                                $("#tipo_ass_da").val(value.tipo_ass);
                                $("#giorno_ass_da").val(date2ita(value.giorno_ass)); 
                                $("#note_ass_da").val(value.note_ass);
                                $("#id_ass_da").val(value.id_ass);
                            }
                        }); //end .each
                    },//end success
                    error: function(){alert("errore");}
                }); //end secondo ajax
    Con la chiamata ajax estrapolo i dati dal database e li ricevo in formato json, visto che i dati vengono prelevati da due tabelle, ricevo una cosa del genere:

    codice:
    [    {
            "id_turno": "1946",
            "id_utente": "1",
            "giorno": "2015-05-17",
            "orario": "13.00-19.00",
            "data_inserimento": "17/05/2015 17:44"
        },
        {
            "id_ass": "5",
            "id_utente": "1",
            "giorno_ass": "2015-05-19",
            "tipo_ass": "Riposo",
            "data_inserimento_ass": "",
            "flag": "1"
        }
    ]
    Quindi faccio un if sul id se si tratto di un turno visualizzo i dati del corrispettivo array mentre se l'id e di un assenza (id_ass) visualizzo i dati del corrispettivo array. Il problema del replace, è che quando ho la data del turno non ho quella del assenza e viceversa.

    Secondo voi ho sbagliato approccio, ?
    Ultima modifica di sixdas; 22-05-2015 a 14:27

  5. #5
    Quote Originariamente inviata da sixdas Visualizza il messaggio
    Il problema del replace, è che quando ho la data del turno non ho quella del assenza e viceversa
    Quindi devi verificare a monte di che tipo di dato si tratta e non eseguire comunque entrambe le operazioni.
    codice:
                        $.each(data, function(key, value){
                            if(value.id_turno){//value.id_turno !=undefined
                                 // Dettaglio turno   
                                $("#giorno_r").val(date2ita(value.giorno));
                                $("#tipo_serv_r").val(value.tipo_serv);
                                $("#orario_r").val(value.orario);
                                $("#note_r").val(value.nota);
                                $("#ore_stra_r").val(value.ore_stra);
                            else if(value.id_ass){//value.id_ass !=undefined
                                //Dettaglio assenza
                                $("#tipo_ass_da").val(value.tipo_ass);
                                $("#giorno_ass_da").val(date2ita(value.giorno_ass)); 
                                $("#note_ass_da").val(value.note_ass);
                                $("#id_ass_da").val(value.id_ass);
                            }
                        });

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Io avevo fatto in questo modo:

    codice:
                        $.each(data, function(key, value){                        switch(id_turno_s) {
                                case value.id_ass:
                                    $("#tipo_ass_da").val(value.tipo_ass);
                                    $("#giorno_ass_da").val(date2ita(value.giorno_ass));
                                    $("#note_ass_da").val(value.note_ass);
                                    $("#id_ass_da").val(value.id_ass);
                                break;
                                case value.id_turno:
                                    $("#giorno_d").val(date2ita(value.giorno));
                                    $("#tipo_serv_d").val(value.tipo_serv);
                                    $("#orario_d").val(value.orario);
                                    $("#note_d").val(value.nota);
                                    $("#ore_stra_d").val(minita(value.ore_stra));
                                break;
                            } //end switch
                        }); //end .each
    Alla fine penso sia la stessa cosa giusto?

  7. #7
    Quote Originariamente inviata da sixdas Visualizza il messaggio
    Io avevo fatto in questo modo:

    codice:
                        $.each(data, function(key, value){                        switch(id_turno_s) {
                                case value.id_ass:
                                    $("#tipo_ass_da").val(value.tipo_ass);
                                    $("#giorno_ass_da").val(date2ita(value.giorno_ass));
                                    $("#note_ass_da").val(value.note_ass);
                                    $("#id_ass_da").val(value.id_ass);
                                break;
                                case value.id_turno:
                                    $("#giorno_d").val(date2ita(value.giorno));
                                    $("#tipo_serv_d").val(value.tipo_serv);
                                    $("#orario_d").val(value.orario);
                                    $("#note_d").val(value.nota);
                                    $("#ore_stra_d").val(minita(value.ore_stra));
                                break;
                            } //end switch
                        }); //end .each
    Alla fine penso sia la stessa cosa giusto?
    Il tuo metodo presuppone che l'id del turno sia sempre diverso dall'id dell'assenza, cosa vera se i turni e le assenze sono nella stessa tabella del db, ma se sono in due tabelle diverse, potrebbe capitare che id_turno e id_ass siano uguali. Se ciò accadesse si avvererebbe il primo case anche se passi un turno.
    Il metodo che ti ho indicato invece processerebbe correttamente anche nel caso di id uguali.

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    258
    Ok, grazie mille per la precisazione, utilizzerò il tuo metodo.

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.