Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    28

    esecuzione script troppo veloce con Ajax?

    Ciao, ragazzi. Non so se il titolo è chiaro (non credo ;-))
    Mi spiego. In una pagina in cui permetto al cliente di modificare gli ordini ricevuti, devo aggiornare non solo i tota con e senza IVA realtivi al singolo prodotto, ma anche i totali dell'ordine nel suo complesso. Il primo problema è risolto con una chiamata Ajax.Updater (uso Prototype). Per il problema del totale dell'ordine, nella chiamata all'Ajax Updater ho inserito una chiamata ad un'altra funzione che recupera i nuovi valori dei prezzi e li somma. Se il cliente ha un ordine di 2 calzini da 10.00 euro e 1 paio di guanti da 20,00 euro e l'ordine diventa di 4 calzini, la funziona recupera il nuovo valore del totale senza iva (cioè 40,00) e lo somma al valore dei guanti (20,00 euro), dandomi così il totale complessivo di euro 60,00.

    Solo che il tutto funziona solo se nella funzione di aggiornamento del totaledell'ordine inserisco un alert che in sostanzxa dà il tempo di aggiornare il valore del prezzo.

    Posto il codice. Con questo script aggiorno il valore del totale dei guanti:
    Codice PHP:
    function updateTotSI(numrownewvaluemultiplier){
         var 
    updater = new Ajax.Updater'totSI'+numrow'scripts/sls_priceFinder.php?op=edit&arg=totSI&multiplying='+newvalue+
             
    '&multiplier='+multiplier);
          
    updateTotOrd();
     } 
    Con il codice seguente aggiorno il totale ordine senza iva:
    Codice PHP:
    function updateTotOrd(){
         
    alert('function updateOrd(NEW) called');
         var 
    cols = $$('td.totSI');
         var 
    sumSI=0.00;
         
    cols.each(function(element){
             var 
    newvalue element.innerHTML;
             
    sumSI parseFloat(sumSI) + parseFloat(newvalue);
         }) 
    //    alert(sumSI.toFixed(2));
         
    document.getElementById('totOrd').innerHTML sumSI.toFixed(2);

    Come vedete il primo alert non è commentato , il secondo sì. se inverto la cosa commentando il primo alert e attivando il secondo, il risultato è che lo script non funziona e il valore restituito è uguale a quello di partenza. In pratica, lo script non vede il nuovo valore dell'ordine dei calzini ma quello vecchio e quindi mi restituisce il valore totale dell'ordine senza modifiche.

    Come posso fare?

    Vi prego: non so quante volte ho postato sui vari forum e non ho mai ricevuto uno straccio di risposta (non prima che io mi stufassi di controllare, almeno :-)). Aiutoooo!!!

    Grazie!

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Premetto che non conosco Prototype pertanto potrebbe non essere questo il problema.
    Intendo che ie recupera i dati dalla cache!!!
    -Il problema con che browser lo riscontri?
    -Come invi i dati post/get?
    -Metti un link ad una demo pubblica.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    28
    Ciao Andrea. Intanto grazie della risposta.
    Sviluppo il codice su Firefox: una volta che è a posto lo testo sugli altri browser.
    Come vedi dal codie postato, nella chiamata Ajax non specifico il metodo: a quanto ho capito, con Prototype lo si può omettere, ma quasi quasi farò un test e ti farò sapere...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    28
    Una precisazione. Come pensavo, il problema è che la funzione uopdaeTotOrd viene eseguita prima che la chiamata Ajax abbia aggiornato i valori che vengono utilizzati dalla funzione stessa, anche se viene chiamata dopo la chiamata Ajax.
    Ho provato ad usare onComplete e onSuccess ma il problema rimane. Mi servirebbe un modo di ritardare l'esecuzione quel tanto che basta, ma se uso setTime, così:

    Codice PHP:
    function updateTotSI(numrownewvaluemultiplier){
         var 
    updater = new Ajax.Updater'totSI'+numrow'scripts/sls_priceFinder.php?op=edit&
         arg=totSI&multiplying='
    +newvalue+'&multiplier='+multiplier);
          
    setTime(updateTotOrd(),2000);
     } 
    la funzione non viene chiamata affatto.

  5. #5
    infatti, il problema è proprio quello, che dovresti aspettare il complete della chiamata ajax. Non conosco prototype, ma mi pare strano che non fornisca un callback. guardati bene la documentazione .. sennò .. passa a jQuery

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    28
    la funzione di callback c'è, anzi ce ne sono tre: onSuccess, onComplete e onFailure. Solo che nel mio caso, per un motivo che non capisco, non funzionano!

    Grazie comunque dell'aiuto. Se risolvo, posto la soluzione.

  7. #7

    Re: esecuzione script troppo veloce con Ajax?

    Codice PHP:
    function updateTotSI(numrownewvaluemultiplier){
         var 
    updater = new Ajax.Updater'totSI'+numrow'scripts/sls_priceFinder.php?op=edit&arg=totSI&multiplying='+newvalue+
             
    '&multiplier='+multiplier,{ onComplete:updateTotOrd });
          
     } 
    Prova un po' ...
    Secondo me così funziona...

    HTH
    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

  8. #8
    prova a postare il codice che hai utilizzato con il callback onSuccess, magari chai sbagliato a scrivere qualcosa lì. io insiterei a cercare perchè il callback non viene chiamato, la soluzione sono convinto sia su quella strada
    Davide

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    28

    SOLVED

    Okay. Homezappa ha risolto l'arcano: il problema era che io scrivevo

    Codice PHP:
    onCompleteupdateTotOrd() } 
    mentre invece si deve scrivere

    Codice PHP:
    onCompleteupdateTotOrd 
    senza le parentesi tonde! La domanda non è chi è, la domanda è: pecché!?

    Sono un novizio di Javascript, ma fin'ora ho sempre chiamato le funzioni con le
    parentesi tonde alla fine (o almeno, così mi sembra di ricordare), mentre invece
    mi pare di capire che se la funzione non ha argomenti o parametri le parentesi non bisogna metterle. E' così?

    Comunque grazie a tutti, di cuore, specie a Homezappa (vabbè, io non avrò molta fantasia per i nicknames, ma tu dove sei andato a pescarlo il tuo?)

    Brinderò per festeggiare questo storico giorno in cui un forum mi ha risolto un problema.

    Grazie ancora.

  10. #10

    Re: SOLVED

    Originariamente inviato da Marqus
    Okay. Homezappa ha risolto l'arcano: il problema era che io scrivevo

    Codice PHP:
    onCompleteupdateTotOrd() } 
    mentre invece si deve scrivere

    Codice PHP:
    onCompleteupdateTotOrd 
    senza le parentesi tonde! La domanda non è chi è, la domanda è: pecché!?
    Pecchè onComplete, come argomento, vuole una funzione, (cioè il suo 'indirizzo'), che poi chiamerà a suo tempo.
    Se la tua funzione avesse avuto parametri, allora avresti dovuto utilizzare, per farla chiamare con i parametri, una 'funzione anonima':
    Codice PHP:
    onComplete: function(){tuaFunzione(parametro,altroparametro);} } 
    Comunque grazie a tutti, di cuore, specie a Homezappa (vabbè, io non avrò molta fantasia per i nicknames, ma tu dove sei andato a pescarlo il tuo?)
    Beh, per uno che si chiama Zappaterra di cognome, che è stato sempre chiamato 'Zappa' da quando andava alle elementari, che ha due figli che vengono (ovviamente) chiamati 'Zappa' .. beh, è stato facile!
    Brinderò per festeggiare questo storico giorno in cui un forum mi ha risolto un problema.
    Grazie ancora.
    Prego, quando si può, si fa

    Zappa
    [PC:Presario 2515EU][Cpu:P4@2.3GHz][Ram: 512M][HDU:80G@5400 RPM]
    [Wireless:LinkSys][OS: Ubuntu 9.04 - Jaunty Jackalope]

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 © 2026 vBulletin Solutions, Inc. All rights reserved.