+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 8 su 8

Interazioni php, ajax e javascript

  1. #1
    ariannaarona non  in linea Novello
    Buongiorno a tutti,

    ho un problema da sottoporvi per quanto riguarda l'utilizzo di ajax, php e javascript che mi sta facendo perdere giornate intere cercando di capire cosa non va e dove.

    Questa e' la situazione:
    Ho una pagina php (chiamiamola principale) che contiene una texbox. Al variare del valore nella textbox viene richiamato, tramite ajax, uno script php il cui output riempie un div nella pagina principale. Ovviamente l'output dello script varia a seconda del parametro che gli viene passato.

    Fino a qui tutto bene, se non che, all'inserimento di un valore ben preciso (un terminatore), lo script deve eseguire le sue operazioni e poi la pagina PRINCIPALE deve essere rediretta. Se utilizzo il banale hedate("Location:....."), mi viene rediretto solo il contenuto del div, mentre io ho bisogno di redirigere l'intera pagina.

    Avrei pensato ad un banalisimo scriptino javascript, ma non so per quale motivo gli script javascript all'interno dello script php non vengono eseguiti.

    Qualcuno a qualche suggerimento, idea, consiglio?

    Grazie,
    Arianna

  2. #2
    L'avatar di Master85
    Master85 non  in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao ariannaarona,
    benvenuto in MasterDrive.it,
    come ho gia' spiegato in precedenza in altri topic e' *impensabile* cercare di unire un linguaggio di programmazione client con uno di tipo server. Con tale affermazione:

    Quote Originariamente inviato da ariannaarona
    ...ma non so per quale motivo gli script javascript all'interno dello script php non vengono eseguiti...
    Non capisco cosa intendi dire, senza porzioni di codice da analizzare non posso dir nulla.

    Continuo con segnalare un ulteriore precisazione, "Interazioni php, ajax e javascript", javascript e' compreso in AJAX, non e' necessario specificarlo due volte

    Tornando al tuo problema, dunque, se lavori in AJAX, saprai sicuramente che data una certa richiesta XMLHttprequest, il server rispondera' in un certo modo, fornendo un determinato documento "XML". Dovra' essere il codice lato client a interpretare tale documento e agire di conseguenza. Per effettuare un redirect tramite Javascript potresti ricorrere all'oggetto "document":

    codice HTML:
    <script language="javascript" type="text/javascript">
        document.location.href = "mia_nuova_pagina.php";
    </script>

  3. #3
    ariannaarona non  in linea Novello
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    come ho gia' spiegato in precedenza in altri topic e' *impensabile* cercare di unire un linguaggio di programmazione client con uno di tipo server.
    Ciao,
    ho letto l'articolo cui ti riferisci, ma i miei dubbi sorgono nel momento in cui senza utilizzare ajax le cose funzionano, utilizzandolo non piu' e quindi voglio capire dove sto' sbagliando.

    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Non capisco cosa intendi dire, senza porzioni di codice da analizzare non posso dir nulla.
    Ok. Qui di seguito un po' di cut&paste.
    SelectItem.php - e' la pagina *principale*

    [...]var XMLHTTP;
    function getXMLHTTP(){
            if (window.ActiveXObject){
                    try {
                            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP")
                    } catch (e) {
                            try {
                                    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP")
                            } catch (e) {
                                    alert("AJAX non supportato");
                                    xmlhttp=false
                            }
                    }
            }else  if (window.XMLHttpRequest) {
                    xmlhttp = new XMLHttpRequest()
                    xmlhttp.overrideMimeType('text/xml');
            }
    
    
            return xmlhttp;
    }
    
    function callFunction(divID, script){
            XMLHTTP=getXMLHTTP();
            if(!XMLHTTP){
                    alert("no");
                    return;
            }
    
            XMLHTTP.onreadystatechange = function() {
                    if(XMLHTTP.readyState == 4){
                            try{
                                    if(XMLHTTP.status !== undefined && XMLHTTP.status != 0){
                                             document.getElementById(divID).innerHTML = XMLHTTP.responseText;
                                    }else{
                                            alert(XMLHTTP.statusText);
                                    }
                            }
                            catch(e){
                                    //      questo messaggio non funziona nei casi perticolari con mozilla
                                    alert('Error retriving data');
                            }
                    }
            }
    
            XMLHTTP.open('GET', script, false);
            XMLHTTP.send(); 
    }
    [... un po' elaborazioni...]
           <tr>
                    <td align=center><input type="text" name="nNumInvBen" id="nNumIn
    vBen" size="60" onChange="callFunction('ItemTable','GotItem.php?nNumInvBen='+nNumInvBen.value); setFocus();"  onkeyup="return onEnter(event);">
            </tr>
    
    [...]
    <br>
    <div id="ItemTable"></div>                                
    
    [...]
    
    GotItem.php - e' lo script php richiamato e la *pietra dello scandalo*
    [... tante elaborazione php....]
    if($clean==1){
                                            pulisci_sessione();?>
                                            <script language="javascript">";
                                                    alert("stanza chiusa");
                                            </script><?
    }
    [.. tante altre elaborazioni php...]
    

    Ora, la funzioe pulisci_sessione viene regolarmente eseguita, ma dell'alert neanche l'ombra (al momento c'e' alert ma e' qui che dovrebbe esserci il redirect).

    Hai idea del perche'. Prima di utilizzare AJAX utilizzavo gli IFrame e tutto funzionava correttamente. Ora.....


    attendo speranzonsa....
    Arianna
    Ultima modifica di Master85; 10-04-2007 10:59 

  4. #4
    L'avatar di Master85
    Master85 non  in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao Arianna,
    il codice Javascript non dovrebbe presentare problemi, effettivamente e' molto semplice. Cio' che non capisco sono queste righe di codice:

    [...]
    
    GotItem.php - e' lo script php richiamato e la *pietra dello scandalo*
    [... tante elaborazione php....]
    if($clean==1){
                                            pulisci_sessione();?>
                                            <script language="javascript">";
                                                    alert("stanza chiusa");
                                            </script><?
    }
    [.. tante altre elaborazioni php...]
    
    Probabilmente ti starai riferendo al codice di un'altra pagina suppongo, "goItem.php". La variabile $clean quando e come viene inizializzata a 1 ? Inoltre, hai notato i doppi apici ed il punto e virgola di troppo dopo la dichiarazione di codice Javascript ? Solitamente questo genera un errore

    <script language="javascript">";
    
    Concludo col consigliarti di aprire il codice PHP sempre utilizzando la seguente notazione:

    Codice PHP:
    <?php
    ...
    ?>
    e non
    Codice PHP:
    <?
    ...
    ?>
    Cio' potrebbe causare "non interpretazione" di codice su server web con PHP 5


  5. #5
    ariannaarona non  in linea Novello
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Ciao Arianna,
    il codice Javascript non dovrebbe presentare problemi, effettivamente e' molto semplice. Cio' che non capisco sono queste righe di codice:

    [...]
    
    GotItem.php - e' lo script php richiamato e la *pietra dello scandalo*
    [... tante elaborazione php....]
    if($clean==1){
                                            pulisci_sessione();?>
                                            <script language="javascript">";
                                                    alert("stanza chiusa");
                                            </script><?
    }
    [.. tante altre elaborazioni php...]
    
    Probabilmente ti starai riferendo al codice di un'altra pagina suppongo, "goItem.php". La variabile $clean quando e come viene inizializzata a 1 ? Inoltre, hai notato i doppi apici ed il punto e virgola di troppo dopo la dichiarazione di codice Javascript ? Solitamente questo genera un errore
    l'apice ed il punto e virgola di troppo sono rimasti dopo aver inserito il javscript in un echo (le sto provando veramente tutte), e non sono quelle la causa del problema (eliminate e ritestato, ma non cambia nulla).
    La variabile $clean viene settata quando il valore inserito nella texbox nNumInvBen assume un valore ben preciso che scatena, fra l'altro, la rimozione di tutte le variabili di sessione settata e dovrebbe far ricominciare la procedura dall'inizio. Da qui la necessita' di fare un redirect globale alla index.

    Il fatto che ajax sia utilizzato su un onChange e non tramite un submit puo' essere la causa del male?

    A.
    Ultima modifica di Master85; 10-04-2007 11:56 

  6. #6
    L'avatar di Master85
    Master85 non  in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao Arianna,
    l'evento onchange non e' la causa del problema. Posso consigliarti di testare il tutto con Mozilla Firefox e dare uno sguardo alla "Console degli Errori", da "Strumenti -> Console degli Errori -> Tutti". Non vorrei che il problema dipendesse da pulisci_sessione(); potresti postare il codice relativo a questa funzione ?



    P.S.
    Con tutte quelle elaborazioni il problema potrebbe essere ovunque

  7. #7
    ariannaarona non  in linea Novello
    Quote Originariamente inviato da Master85 Visualizza il messaggio
    Ciao Arianna,
    l'evento onchange non e' la causa del problema. Posso consigliarti di testare il tutto con Mozilla Firefox e dare uno sguardo alla "Console degli Errori", da "Strumenti -> Console degli Errori -> Tutti". Non vorrei che il problema dipendesse da pulisci_sessione(); potresti postare il codice relativo a questa funzione ?

    P.S.
    Con tutte quelle elaborazioni il problema potrebbe essere ovunque
    Sto lavorando con Firefox ed ho anche installato Firebug.. una vera manna.. ma in questo caso non mi aiuta per niente. La JavascriptCPnsole mi da un warning:

    Warning: Element referenced by ID/NAME in the global scope. Use W3C standard document.getElementById() instead.
    Source File: SelectItem.php?cCodSta=S1R15 Line: 1

    ed un errore sull'html (anche se guardando codice e sorgente non capisco cosa voglia dire):
    Error: junk after document element
    Source File: GotItem.php?nNumInvBen=S1R15
    Line: 4, Column: 1
    Source Code:
    <table width="100%" cellspacing=1>^


    Il codice della pulisci_sessione e' la cosa piu' banale del mondo e lo incollo qui sotto:

    Codice PHP:
    ...
    function 
    pulisci_sessione(){
            foreach (
    $_SESSION as $key => $value){
                    unset(
    $_SESSION[$key]);
            }
            foreach (
    $_POST as $key => $value){
                    unset(
    $_POST[$key]);
            }
            foreach (
    $_GET as $key => $value){
                    unset(
    $_GET[$key]);
            }
    }.... 
    ... il mistero si infittisce......

    A.

    PS: se puo' essere utile ti posso mandare (in privato) l'URL dove testare il mostro.....
    Ultima modifica di Master85; 10-04-2007 12:28 

  8. #8
    L'avatar di Master85
    Master85 non  in linea Moderatore Globale Ultimo blog: Eclipse: Un IDE per PHP e Python
    Ciao Arianna,
    dunque, il primo messaggio e' "semplicemente" un warning, ti invita ad utilizzare il classico "document.getElementById() " anziche' un ID o un NOME dell'elemento interessato nel file SelectItem.php. Il secondo messaggio invece, e' un errore, cio' comporta l'interruzione dello script e di conseguenza il mal funzionamento del programma. Dunque, da quanto posso capire e' dovuto all'omissione degli apici per la proprieta' cellspacing della table:

    <table width="100%" cellspacing="1">
    ...
    
    L'omissione degli apici genera come si suol dire del codice "sporco" di difficile interpretazione da parte del browser.


+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risolto: [JAVASCRIPT][AJAX][PHP]funzione onchange e ajax
    Da gatto76 nel forum HTML, CSS e JavaScript
    Risposte: 1
    Ultimo Post: 28-03-2012, 19:09
  2. [Javascript Ajax] focus dopo xmlHttp
    Da luca1317 nel forum HTML, CSS e JavaScript
    Risposte: 3
    Ultimo Post: 25-07-2009, 01:54
  3. [JavaScript] Gestione risposte server con Ajax
    Da Freddy-Cats nel forum HTML, CSS e JavaScript
    Risposte: 7
    Ultimo Post: 08-04-2009, 15:34
  4. Collaborazione: Programmatore Javascript/DOM/AJAX - SporTraveLanguage
    Da STL nel forum Offerte di lavoro
    Risposte: 0
    Ultimo Post: 01-02-2007, 10:03
  5. [Javascript]Differenza tra open di AJAX e load di DOM
    Da Poldo000 nel forum HTML, CSS e JavaScript
    Risposte: 4
    Ultimo Post: 18-01-2007, 17:04