Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    10

    [AJAX] rimane visualizzato il confirm box

    Ciao,
    ho scritto un programma che alla richiesta del submit chiede conferma, poi esegue un XMLHttpRequest in modalità sincrona che prepara alcuni dati in un database e al termine del XMLHttpRequest richiama un programma che emette, in una nuova finestra, il risultato dell'elaborazione.
    Il mio problema è che mentre il XMLHttpRequest è in esecuzione, rimane visibile la finestra del confirm box, io invece vorrei che questa sparisse appena l'utente ha cliccato ok.
    come posso fare?

    Questo è il codice:

    <form name="form0" method=post action="/cgigrp/rptdsph.cgi" onsubmit="return elabora()"
    target="_blank">

    <script language=javascript>
    function elabora() {
    if (confirm('Conferma elaborazione?')) {
    pgmtocall = '/cgigrp/vg24rh0a.cgi';
    stringpar = 'cgcod=' + document.getElementById("cgcod").value
    + '&keyda=' + document.getElementById("keyda").value
    + '&keyal=' + document.getElementById("keyal").value;
    var client = new XMLHttpRequest();
    client.open("POST",pgmtocall,false);
    client.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    client.send(stringpar);
    .....
    .....
    return true;
    }
    else {
    return false;
    }
    }
    </script>

  2. #2
    Ciao,
    la chiamata che esegui è asincrona?

    Altrimenti,
    devi attendere la risposta con readystate completato.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    10
    la chiamata è sincrona.
    Quindi non c'è modo di togliere la finestra del confirm box finchè la chiamata non ha terminato?

  4. #4
    Devi scrivere in odo differente il codice:
    Per esempio se la risposta settasse un flag
    e successivamente testando il flag faresti la chiamata sincrona
    forse riusciresti a chiudere la confirm.

    Ciao
    Mirko Agrati
    WEB : http://mirkoagrati.110mb.com
    RSS : http://feeds.feedburner.com/MirkoAgratiArticoli

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    10
    Ho provato, rimane comunque bloccato sul confirm box finchè non ha finito la chiamata.
    forse dovrei usare un pagina intermedia che magari emetta un messaggio del tipo
    "elaborazione in corso, attendere...." così verrebbe ricoperto il box

  6. #6
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da mobb
    Ho provato, rimane comunque bloccato sul confirm box finchè non ha finito la chiamata.
    forse dovrei usare un pagina intermedia che magari emetta un messaggio del tipo
    "elaborazione in corso, attendere...." così verrebbe ricoperto il box
    Scusa, ma non ti conviene fare la chiamata ajax asincrona? metti il confirm, e dopo il div semitrasparente con la scritta "prego attendere" che toglierai alla fine della elaborazione :master:
    Pietro

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    10
    Se la metto asincrona, mi esegue il submit senza attendere la fine dell'elaborazione, quindi poi mi appare una pagina vuota perchè il programma chiamato non ha ancora popolato il database che devo leggere.

  8. #8
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da mobb
    Se la metto asincrona, mi esegue il submit senza attendere la fine dell'elaborazione, quindi poi mi appare una pagina vuota perchè il programma chiamato non ha ancora popolato il database che devo leggere.
    Scusami la franchezza, ma è evidente che sbagli. A parte il fatto che ajax sincrono è una contraddizione in termini, ti consiglio di rivederti meglio il codice.

    :master: comunque, non ho capito bene il "submit" e ajax. Se spieghi meglio forse si trova una soluzione più facilmente. Ciao.
    Pietro

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    10
    Che sto sbagliando qualcosa è evidente
    Il programma che ho scritto ha una pagina iniziale di richiesta di parametri di elaborazione (range di date, tipologia di dati, ecc..)
    Poi ha un bottone di tipo submit da cliccare quando l'utente ha inserito i parametri:
    <button name="btnavanti" id="btnavanti" type="submit" class="button"
    title="Esegue elaborazione"
    >
    [img]/buttons/avanti.gif[/img]

    quando viene richiesto il submit, viene eseguita la funzione elabora(), che ho già esposto precedentemente.
    Questa funzione richiama un programma che ricevendo i parametri estrae dati da un database e ne popola un altro attribuendogli una chiave univoca per il reperimento.
    Rende questa chiave al mio programma nel responseText e io la metto in un campo hidden della form e proseguo con il submit del programma indicato nell'action.
    Questo secondo programma, riceve nel campo hidden la chiave che deve elaborare, estrae dal database i dati associati a questa chiave, prepara una form e la emette.

    Se faccio la chiamata in modo asincrono, il programma prosegue a chiamare il programma successivo senza passargli la chiave da elaborare, perchè non la riceve finchè non ha terminato la chiamata.

    Spero di essermi spiegata bene.
    Ciao

  10. #10
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    guarda se questa logica ti è utile:

    codice:
    function Button1_onclick() 
    {
        ajax(url, onload, parameters, onerror);
        function onload()
        {
        	//faccio quello che devo
        	//faccio il submit del form
        }
        function onerror()
        {
    		//faccio quello che devo
        }
    }
    Pietro

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