Newsgroup: it.comp.lang.javascript
Titolo: [forse OT] valore $_REQUEST con ajax (sajax)

voglio fare un piccolo scipt con ajax e php ma ho un problema
da pagina1.html apro pagina2.html tramite un form
se il form lo metto a GET nella pagina2.html riesco a leggere la variabile
con ajax, mentre se passo i dati in POST mi da Undefined index,
interrogandola nello stesso modo con $_REQUEST
qualcuno sa dirmi come mai, e magari darmi qualche soluzione...
ciao a tutti
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 qualcuno sa dirmi come mai, e magari darmi qualche soluzione...
Ma no, è impossibile ché non si capisce niente.
-- 
Nando [?]
Apostolo della Prova

 Eh?




specifico meglio (forse)
nella pagina2.html ho associato ad un pulsante una funzione ajax per
interrogare un dato passato dalla pagina1.html con $_REQUEST (php)
se faccio il $_REQUEST della variabile al caricamento della pagina mi
viene restituito il valore (quindi la variabile c'è)
se invece la interrogo con la funzione ajax ho 2 comportamenti diversi:
1 - passagio dati dalla pagina1.html con GET: la funzione mi restituisce
il valore
2 - passagio dati dalla pagina1.html con POST: la funzione NON mi
restituisce il valore
è un comportamento normale o c'è qualcosa di anomalo
ciao a tutti e spero di essermi spiegato meglio


 2 - POST: la funzione NON mi restituisce il valore
Continuo a non capire, ma il dubbio che mi viene (premesso che non conosco
PHP) è il seguente: non è che $_REQUEST contiene le variabili passati in
query-string (quindi con metodo GET) mentre per le variabili passate con
POST c'è un'altra collection in PHP (che so, $_POST)?


 > $_REQUEST



$_REQUEST interroga sia le variabili POST che GET
è proprio per questo che non riesco a capire come mai le vede in un modo e
non nell'altro
esistono anche $_POST e $_GET ma anche con queste ho provato ma non
funziona
chissà.....


 chissà.....
Allora, fin'ora hai fatto tante parole citanto linguaggi che sono OT ecc...
è giunta l'ora che posti le 3 righe di codice JS per fare quello che dici

 e non nell'altro
Non usare $_REQUEST, ma solo $_GET, $_POST e $_COOKIES.
Controlla se hai impostato le variabili correttamente nella richiesta 
XHR in POST e se hai specificato il corretto enctype.
Senza il codice e` difficile essere piu` precisi.


Ok, ho detto una cazzata... grazie ;)


Ugo ha scritto:


codice pagina1.html:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"
http://www.w3.org/TR/html4/strict.dtd
">
<html>
<head>
<title>Sans Titre</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="generator" content="HAPedit 3.1">
</head>
<body bgcolor="#FFFFFF">
<hr />
<form
action="
http://localhost/intranet/prove/ajax/esempi_sajax/sessioni.php
"
name="principale" method="post" id="principale">
<input type="text" size="20" name="dati_ruolo" id="dati_ruolo" value="100"
/>
<input type="submit" name="vai" value="procedi" id="vai" />
</form>
</body>
</html>
questo è il codice sajax e javascript:
<script type="text/javascript" language="JavaScript">
 
        // remote scripting library
        // (c) copyright 2005 modernmethod, inc
        var sajax_debug_mode = false;
        var sajax_request_type = "GET";
        var sajax_target_id = "";
        var sajax_failure_redirect = "";
 
        function sajax_debug(text) {
            if (sajax_debug_mode)
                alert(text);
        }
 
        function sajax_init_object() {
            sajax_debug("sajax_init_object() called..")
 
            var A;
 
            var msxmlhttp = new Array(
                'Msxml2.XMLHTTP.5.0',
                'Msxml2.XMLHTTP.4.0',
                'Msxml2.XMLHTTP.3.0',
                'Msxml2.XMLHTTP',
                'Microsoft.XMLHTTP');
            for (var i = 0; i < msxmlhttp.length; i++) {
                try {
                    A = new ActiveXObject(msxmlhttp[i]);
                } catch (e) {
                    A = null;
                }
            }
 
            if(!A && typeof XMLHttpRequest != "undefined")
                A = new XMLHttpRequest();
            if (!A)
                sajax_debug("Could not create connection object.");
            return A;
        }
 
        var sajax_requests = new Array();
 
        function sajax_cancel() {
            for (var i = 0; i < sajax_requests.length; i++) 
                sajax_requests[i].abort();
        }
 
        function sajax_do_call(func_name, args) {
            var i, x, n;
            var uri;
            var post_data;
            var target_id;
 
            sajax_debug("in sajax_do_call().." + sajax_request_type + "/"
+ sajax_target_id);
            target_id = sajax_target_id;
            if (typeof(sajax_request_type) == "undefined" ||
sajax_request_type == "") 
                sajax_request_type = "GET";
 
            uri = "/intranet/prove/ajax/esempi_sajax/sessioni.php";
            if (sajax_request_type == "GET") {
 
                if (uri.indexOf("?") == -1) 
                    uri += "?rs=" + escape(func_name);
                else
                    uri += "&rs=" + escape(func_name);
                uri += "&rst=" + escape(sajax_target_id);
                uri += "&rsrnd=" + new Date().getTime();
 
                for (i = 0; i < args.length-1; i++) 
                    uri += "&rsargs[]=" + escape(args[i]);
                post_data = null;
            } 
            else if (sajax_request_type == "POST") {
                post_data = "rs=" + escape(func_name);
                post_data += "&rst=" + escape(sajax_target_id);
                post_data += "&rsrnd=" + new Date().getTime();
 
                for (i = 0; i < args.length-1; i++) 
                    post_data = post_data + "&rsargs[]=" + escape(args[i]);
            }
            else {
                alert("Illegal request type: " + sajax_request_type);
            }
 
            x = sajax_init_object();
            if (x == null) {
                if (sajax_failure_redirect != "") {
                    location.href = sajax_failure_redirect;
                    return false;
                } else {
                    sajax_debug("NULL sajax object for user agent:n" +
navigator.userAgent);
                    return false;
                }
            } else {
                x.open(sajax_request_type, uri, true);
                // window.open(uri);
 
                sajax_requests[sajax_requests.length] = x;
 
                if (sajax_request_type == "POST") {
                    x.setRequestHeader("Method", "POST " + uri + "
HTTP/1.1");
                    x.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
                }
 
                x.onreadystatechange = function() {
                    if (x.readyState != 4) 
                        return;
                    sajax_debug("received " + x.responseText);
 
                    var status;
                    var data;
                    var txt = x.responseText.replace(/^s*|s*$/g,"");
                    status = txt.charAt(0);
                    data = txt.substring(2);
                    if (status == "") {
                        // let's just assume this is a pre-response
bailout and let it slide for now
                    } else if (status == "-") 
                        alert("Error: " + data);
                    else {
                        if (target_id != "") 
                            document.getElementById(target_id).innerHTML =
eval(data);
                        else {
                            try {
                                var callback;
                                var extra_data = false;
                                if (typeof args[args.length-1] ==
"object") {
                                    callback =
args[args.length-1].callback;
                                    extra_data =
args[args.length-1].extra_data;
                                } else {
                                    callback = args[args.length-1];
                                }
                                callback(eval(data), extra_data);
                            } catch (e) {
                                sajax_debug("Caught error " + e + ": Could
not eval " + data );
                            }
                        }
                    }
                }
            }
 
            sajax_debug(func_name + " uri = " + uri + "/post = " +
post_data);
            x.send(post_data);
            sajax_debug(func_name + " waiting..");
            delete x;
            return true;
        }
 
 
        // wrapper for dati_request        
        function x_dati_request() {
            sajax_do_call("dati_request",
                x_dati_request.arguments);
        }
 
        function dati_request_js() {
x_dati_request('');
return true;
}
</script>
questo è il button che dovrebbe darmi la risposta:
<input type="button" name="aaa" value="button1"
onclick="dati_request_js(); ">
e questo è l'errore che mi da firebug:
<b>Notice</b>:  Undefined index:  dati_ruolo in
<b>c:programmieasyphpwwwintranetproveajaxesempi_sajax
sessioni.php</b> on line <b>22</b><br />var res = ''; res;
cioè non trova la variabile dati_ruolo
non volevo postare il codice x' pensavo che fosse solo una
complicazione... ma forse mi sbaglio...


 cioè non trova la variabile dati_ruolo
ok

 ok
bah...


 cioè non trova la variabile dati_ruolo
Cioè, l'errore lo dà nella pagina sessioni.php e tu posti tutto fuorché il
codice di quella pagina? Allora lo fai apposta! :-P
Senti, ti va di fare una cosa? Spiega, nel modo più semplice possibile,
cosa stai cercando di fare, poi *dopo* spiega /come/ stai cercando di
farlo; poi si vede. Oramai mi hai messo la curiosità, vorrei capire :)


 farlo; poi si vede. Oramai mi hai messo la curiosità, vorrei capire :)
sostanzialmente voglio partire da pagina1.php aprire una pagina2.php
tramite  un form posto nella pagina1.php e dalla pagina2.php leggere i
dati passati tramite post dalla pagina1.php utilizzando ajax (nel mio caso
sajax, ma penso cambi poco)
spero di essere stato chiaro (chi poco conosce è anche poco chiaro...
scusatemi anticipatamente se non lo sono stato)


 bah...
E no, perplesso lo sono io,
perchè hai postato 250 RIGHE di codice che non c'entrano quasi ninete :(
e tra l'altro inizio a temere che non hai le idee chiarissime su queste
tematiche
e quindi la vedo lunga e dura...

 codice di quella pagina? Allora lo fai apposta! :-P
senti ti lascio la patata bollente, ok :)

 sajax, ma penso cambi poco)
Sì, cambia poco ché sempre di javascript si tratta, non è che "ajax" e
"sajax" sono due linguaggi diversi, eh, anzi non sono proprio linguaggi.
Detto ciò... perdonami, ma se ho capito bene ti mancano le basi più
elementari del funzionamento del web. Vedi se ho capito:
in pagina1.php c'è un form la cui action è impostata a "sessioni.php";
quando fai il submit del form, il browser invia una richiesta al server per
la risorsa "sessioni.php" e gli passa i valori dei campi del form; il
server elabora lo script session.php, genera codice html e lo rimanda al
browser che lo visualizza; a questo punto, tu vorresti che il browser,
tramite chiamata asincrona, chiedesse al server i dati che pagina1.php gli
aveva mandato al submit del form... se è così, come speri che il server se
li /ricordi/? E inoltre, A CHE ACCIDENTI SERVE se quei dati li hai a
disposizione già PRIMA che sessioni.php venga mandato al browser?!?
Sono perplesso...


 ha scritto:

Simpatico! A me lasci i compiti ardui e tu... tu vai a prenderti i baci
della pulsella :-D


 della pulsella :-D
:-P

 ha scritto:



1 - pagina1.php apre tramite form la pagina session.php passandogli dei
valori del campo form
2 - quando mi trovo nella pagina session.php tramite un button e sajax
voglio leggere i valori passati dalla pagina1.php
se li passo tramite get tutto funziona se li passo tramite post non
funziona  una fava...
ecco quello che voglio fare 


 funziona  una fava...
E, francamente, non capisco neanche come sia possibile che funzioni 'sta
cosa se il form è inviato con metodo get... non è che si può vedere com'è
fatto session.php?


 ecco quello che voglio fare
allora cosa vuoi fare, ti giuro non è ancora del tutto chiaro, cmq
standomene a quello che hai scritto ora faccio un po' di chiarezza:
[[pagina1.php]]
<html>
....
<form action="session.php">
...
</form>
...
</tml>
[[session.php]]
<html>
....
<?php
// i valori li leggi senza ajax, sajax o minchiax :)
echo $_GET[nome_campo];
echo $_POST[nome_campo];
?>
...
</tml>

 fatto session.php?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"
http://www.w3.org/TR/html4/loose.dtd
">
<html>
  <head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
    <meta name="generator" content="PSPad editor, 
www.pspad.com
">
<script src="/js/funzioni_js.js" type="text/javascript"
language="JavaScript"></script> 
<script type="text/javascript" language="JavaScript">
omissis sajax.....
 
        function dati_request_js() {
x_dati_request();
return true;
}
</script>
    <title>
    </title>
  </head>
  <body>
<form name="principale1" id="principale1" method="post"
action="
http://localhost/php/mysql_pag_conferma_new.php
" onsubmit="return
false;">
      <input type="button" name="aaa" value="button1"
onclick="dati_request_js(); ">
    </form>
  </body>
</html>
questo è il codice della pagina session.php


 questo č il codice della pagina session.php
Non č piů facile con la piccola modifica che apportata? :)


    var dati_ruolo=<?php echo $_GET("dati_ruolo") ?>
pardon:
var dati_ruolo="<?php echo $_GET('dati_ruolo') ?>";


 var dati_ruolo="<?php echo $_GET('dati_ruolo') ?>";
anzitutto grazie per la pazienza tua, di ugo e degli altri
per quanto scrivi è sicuramente più facile così ma usavo sajax perchè i
dati che passo non devono essere visibili dal browser
per questo ho usato sajax e php


 per questo ho usato sajax e php
Premesso che nessun metodo č sicuro (un utente con un po' di esperienza li
recupera lo stesso, quei dati), resta comunque il fatto che il metodo che
utilizzi *non puň* funzionare: quando in pagina1.html si fa il submit del
form, vengono inviati i dati al server e sono disponibili allo script
sessioni.php (che viene eseguito sul server!); una volta eseguito il codice
php, viene generato un file html che viene inviato al client e il lavoro
del server finisce. A questo punto, non dovrebbe piů esserci traccia dei
dati che pagina1.html ha inviato.


 dati che pagina1.html ha inviato.
si effettivamente la sicurezza così è bassa.
comunque adesso ho cambiato sistema ed uso le sessioni per passare e
rielaborare i dati
mi resta comunque il dubbio su come si possa far funzionare questa cosa
adesso non voglio più rubarvi altro tempo, anche perchè anch'io ne ho poco
e so cosa vuol dire toglierne ad altri...
se qualche giorno riesco a chiarire il dubbio (anche se sarà difficile) lo
posterò sicuramente
grazie ancora a tutti
ciao e buona giornata e buone ferie (se non le avete già fatte come me)


 ciao e buona giornata e buone ferie (se non le avete già fatte come me)
Aaaaaaaaaahhhhhhhhhhhhh ;-(
