Mistero Javascript...

di il
10 risposte

Mistero Javascript...


change('1', 'titolo', 'il mondo di tutti', 'Fumetti', '2020-01-02', '1', result_change);

function change(id_campo, campo, value, categoria, data, gruppo, result_change) {
	
var	url = "http://mioip/change.php?modifica_campo=&campo="+campo+"&value="+value+"&categoria="+categoria+"&data="+data+"&gruppo="+gruppo;
  var xhttp;
  xhttp=new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      result_change(xhttp, id_campo, campo, value, categoria, data, gruppo);
    }
  };
  xhttp.open("GET", url, true);
  xhttp.send();
}
function result_change(xhttp, id_campo, campo, value, categoria, data, gruppo) {
	alert(xhttp.responseText);
}
come è possibile che se io richiamo la funzione in questo modo va tutto perfettamente
mentre invece se change() lo chiamo da un onchange() così:

<textarea onChange="change(this.id, 'titolo', this.value, '<?php echo $riga['categoria'];?>', '<?php echo $riga['cartella_locale'];?>', '<?php echo $riga['gruppo'];?>', 'result_change');"
invece funziona lo stesso tutto perfettamente (nel senso che il get alla pagina modifica ugualmente il database) ma non mi funziona l'alert finale?? così come non funziona nessun codice che metto al posto dell'alert
è proprio come se non entrasse in result_change();
anche in change.php è tutto apposto

Non è che neanche un problema del textarea, perché è uguale anche in qualsiasi altro tipo di input

10 Risposte

  • Re: Mistero Javascript...

    Ciò che passa change() è uguale a ciò che passa l'onchange()
    diversamente non si spiega perché funziona in tutti e due i casi...

    la pagina change.php funziona perfettamente, perché fa quello deve fare sia tramite change() sia tramite onchange()
    di conseguenza l'url che viene passato è uguale...

    non si capisce perché l'unica differenza tra i due casi e che nel primo caso l'alert finale funziona, e nel secondo caso no.
    Eppure change.php restituisce la stessa risposta.
  • Re: Mistero Javascript...

    Ho appena provato a sostituire
    <textarea onChange="change(this.id, 'titolo', this.value, '<?php echo $riga['categoria'];?>', '<?php echo $riga['cartella_locale'];?>', '<?php echo $riga['gruppo'];?>', 'result_change');"
    con

    <textarea onChange="change('1', 'titolo', 'il mondo di tutti', 'Fumetti', '2020-01-02', '1', result_change);"


    adesso funziona...

    non capisco quale sia la differenza tra i vari argomenti che sto passando...
  • Re: Mistero Javascript...

    Forse nel primo metti il nome della funzione tra apici 'result_change' nel secondo no?
  • Re: Mistero Javascript...

    Certo che dreamweaver poteva segnarmelo...
  • Re: Mistero Javascript...

    Non era facile individuarlo...
  • Re: Mistero Javascript...

    È programmato bene secondo voi?
  • Re: Mistero Javascript...

    O lo fareste meglio?
  • Re: Mistero Javascript...

    melixo ha scritto:


    O lo fareste meglio?
    Io non chiamerei direttamente una funzione all'interno dell'attributo onchange, ma piuttosto predisporrei una funzione da assegnare tramite il medesimo attributo, che si occupi esclusivamente di gestire l'evento e solo all'occorrenza vada a chiamare altre funzioni (tipo la tua "change") passando i parametri ricavati dall'evento, ossia usando il parametro event usabile su qualsiasi callback di risposta a un evento.

    Questo non per ottenere chissà quali vantaggi, ma quantomeno per ridurre il codice presente nell'HTML e renderlo più chiaro e pulito, e quindi manutenibile.

    Anzi, volendo estremizzare, io userei direttamente la funzione addEventListener() sull'elemento, all'interno di uno script JS separato.

    Ciao!
  • Re: Mistero Javascript...

    Ancora non ci sono arrivato
    so usare solo onchange per adesso, però me lo segno
    però oggi ho imparato le callback in ajax
    (scommetto che è sbagliato dire "callback in ajax"!)
  • Re: Mistero Javascript...

    melixo ha scritto:


    Ancora non ci sono arrivato
    so usare solo onchange per adesso, però me lo segno
    Non è che bisogna "arrivarci"...

    melixo ha scritto:


    però oggi ho imparato le callback in ajax
    (scommetto che è sbagliato dire "callback in ajax"!)
    "Callback" è il nome che dai alle funzioni passate come parametro per gestire l'esito di funzioni asincrone.
    Si usano nelle chiamate AJAX, ma non solo in quelle.

    Ad ogni modo, non andiamo off topic: il problema originale è stato quindi risolto?
Devi accedere o registrarti per scrivere nel forum
10 risposte