Problema jQuery + PHP + AJAX
Taggato: ajax, jquery, php, variabili di ritorno ajax
- Questo topic ha 15 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 7 anni, 3 mesi fa da
Valerio Radice.
- AutorePost
- 27 Giugno 2016 alle 13:46 #6966
dlivi
PartecipanteSalve a tutti,
avrei bisogno di aiuto perchè non riesco a venirne a capo sul problema che riscontro..
Ho uno script AJAX che fa una chiamata ad una pagina PHP e la pagina mi restituisce dei dati in formato JSON… fino a qua tutto bene..
Avrei bisogno di recuperare le variabili di ritorno per poterle poi riutilizzare nella parte $(document).ready(function() { // });
Ho fatto vari tentativi ma senza successo..
Il mio scopo è di inviare alla pagina php l’id utente che ho assegnato ad un input type hidden, tramite l’id passato recupero due dati(user_db e password_db) in formato json, se faccio un alert al success della chiamata AJAX i valori sono corretti, mentre se tento di accedere al di fuori della chiamata AJAX ottengo l’oggetto in questo formato [object Object], al che presumo che dentro quel “object” ci siano i miei dati.. ma non riesco a leggerli… ho girato nei vari forum e ho cercato anche su stackoverflow e la risposta al mio problema, è semplicemente che non posso gestire le variabili di ritorno al di fuori della chiamata AJAX… come posso “aggirare” il problema secondo voi????
Intanto vi mette un po di codice, magari capite anche meglio…
jQuery chiamata AJAX :
<pre class=”lang:js decode:true”>function recuperoUserPassDB(id_user_session){
return $.ajax({
type: ‘post’,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user_session,
dataType: ‘json’,
success: function(data){
return data.user_db,data.password_db;
},
error:function(){
alert(‘la chiamata è fallita’);
}
});}
Pagina PHP
<pre class=”lang:php decode:true “><?php
$mysqli = new mysqli(‘localhost’, ‘user’, ‘password!’, ‘db’);$id_user_session = $_POST[‘id_user_session’];
$query = “SELECT user_db, password_db FROM user_group WHERE id_user = ‘$id_user_session'”;
if ($result = $mysqli->query($query)) {
while ($row = $result->fetch_assoc()) {
echo json_encode($row);
}$result->free();
}$mysqli->close();
?>
ho provato anche a dichiarare una var x = recuperoUserPassDB(1);
e fare un alert di x -> risultato sempre[object Object]…
ho provato a sfogliare x con un ciclo $.each(x, function(chiave,valore){
alert(valore.user_db);
}
ma niente… non riesco ad accedere a quei valori, mi da un errore ‘undefined’ se tento di fare ad esempio x.user_db oppure x.password_db…
Non saprei come recuperare quei valori in un altro modo senza assegnarli a codice o campi hidden html… Perche in quel caso funzionerebbe immagino…
Grazie spero che in qualche modo riuscite ad illuminarmi
29 Giugno 2016 alle 00:07 #6967Valerio Radice
PartecipanteCiao ma anzichè ritornare data (a non so chi) all’esterno di tutto generi una variabile, diciamo globale, poi dentro al doc.ready ci metti la tua ajax ecc…e il risultato lo metti in quella variabile “globale” così lo puoi leggere DOPO la success (fai altre funzioni invocate dopo o qualcosa che controlli che sia finita, che so semafori o eventi).
Altra cosa stampa in console la variabile data di success con
<pre class=”lang:js decode:true “>console.log(“Data di success: \n”,data);
prima della return poi dalla console scopri bene com’è fatto per poterlo utilizzare29 Giugno 2016 alle 12:07 #6969dlivi
PartecipanteCiao, inanzi tutto grazie della risposta!
Ho provato prima di postare quello che mi dici, in questo modo ….
<pre class=”lang:js decode:true”>var x = “”;function recuperoUserPassDB(id_user_session){
return $.ajax({
type: ‘post’,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user_session,
dataType: ‘json’,
success: function(data){
x = data;
return x;
},
error:function(){
alert(‘la chiamata è fallita’);
}
});RecuperoUserPassDB(1);
alert(x);<pre class=”lang:js decode:true”>oppure
alert(x.user_db);
alert(x.password_db);
ma il risultato con gli alert è sempre : undefined;tranne su quello :
<pre class=”lang:js decode:true”>alert(x);
che come risultato mi da [object Object];la cosa strana è che dentro ad x ci sono gli oggetti ma non riesco a sfogliarli o a richiamarli… ho provato anche un ciclo $.each ma non riesco a leggere dentro lo stesso..
dopo svariate prove ho trovato che il problema lo risolvo con una chiamata sincrona… ma è deprecated su jquery… mi confermate?
La mia soluzione è questa :
<pre class=”lang:js decode:true”>function recuperoUserPassDB(id_user){
return $.ajax({
type: “POST”,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user,
async:false,
success: function(){}
}).responseText;
}var UserPassDB = JSON.parse(recuperoUserPassDB($(‘#id_user_session’).val()));
var userdb = UserPassDB.user_db;
var passdb = UserPassDB.password_db;
in questo modo ottengo quello che voglio, cioè rendere userdb e passdb utilizzabili all’interno dello scriptConoscete altri modi?
Vi ringrazio per il tempo dedicato e per le risposte
a presto
29 Giugno 2016 alle 12:44 #6970Valerio Radice
PartecipanteNon devi fare una return, ma devi far partire una funzione che fa quello che devi fare dentro al blocco di success, non prima.
In cosa stai scrivendo? io quei tag pre usati così non li ho mai visti… classico script…
29 Giugno 2016 alle 12:55 #6971dlivi
Partecipantequei tag pre li mette quanto premo per inserire il codice nel post di questa pagina..
ho provato a mettere la funzione dentro al blocco success ma non funziona… l’unico modo in cui funziona e quello che ho messo prima in fondo all’ultimo post.
$.ajax({
type: “POST”,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user,
async:false,
success: function(){function test(){
var x = data.user_db;
var y = data.password_db;
return x,y;
}
}
})
}se richiamo la funzione non ritornano le variabili valorizzate
29 Giugno 2016 alle 15:09 #6972Valerio Radice
PartecipanteNel tuo ultimo post la success non ha l’oggetto del risultato, non andrà mai…la success non ritorna nulla, la function fuori e prende un parametro (il tuo success)
Scusa fai così che dovrebbe essere la strada giusta:
(Tema pacco che anche con l’icona code non funziona…STAFF sistemare!)
<h6>###</h6>
<script type=”text/javascript”>
function _doItForMe(oggettoPassato){
console.log(JSON.stringify(oggettoPassato));
//fai altro tu
var x = oggettoPassato.user_db;
var y = oggettoPassato.password_db;
}
$.ajax({
type: “POST”,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user,
async:false,
success: function(data){
_doItForMe(data);
//qua scordati il eturn, sei in differita..il tuo return va dentro _doItForMe
}//fine success
});//fine ajax
</script>#####
29 Giugno 2016 alle 17:47 #6976dlivi
Partecipantecon la tua funzione non riesco ad accedere alla varibile x e y anche se metto return x,y .. OggettoPassato nel mio caso deve essere id_user_session, nella pagina php eseguo una query per quel valore, quindi mi restituisce solo un set di chiavi, perche quell’id è univoco..
questo mi funziona per quello che devo fare io, e cioe avere accesso alle variabili userdb e passdb..
<pre class=”lang:js decode:true ” >
function recuperoUserPassDB(id_user){
return $.ajax({
type: “POST”,
url: path+’permessi-json.php’,
data: ‘id_user_session=’+id_user,
async:false,
success: function(){}
}).responseText;
}var UserPassDB = JSON.parse(recuperoUserPassDB($(‘#id_user_session’).val()));
var userdb = UserPassDB.user_db;
var passdb = UserPassDB.password_db;29 Giugno 2016 alle 18:54 #6977Valerio Radice
PartecipanteSinceramente non ho ancora capito cosa stai combinando…ma tu nn riesci a passarle o a inviarle?nn sto capendo.bene … fai prima a cercarmi su skype o a chiamarmi 🙂 trovi tutto con google :p
29 Giugno 2016 alle 19:09 #6978dlivi
PartecipanteDevi avere pazienza… putroppo sono autodidatta e molti meccanismi tendo a complicarli 🙁 …
la mia intenzione è di recuperare le due variabili user_db e password_db passando tramite AJAX l’id dell’utente… quelle variabili che recupero le uso in altri script, quindi mi serve che siano accessibili alle altre funzioni fino alla fine del codice..
spero di essermi spiegato ora… scusami ancora, e grazie!!!
30 Giugno 2016 alle 05:06 #6979Valerio Radice
PartecipanteOk perfetto, la console di javascript del browser la sai usare?
Passo 1: hai controllato l’outpu del PHP prima di usarlo come ajax? è giusto? hai messo la stringa header aplication/json visto che stai facendo una chiamata json^? (all’inizio della pagina
<pre class=”lang-php prettyprint prettyprinted”><span class="pln">header</span><span class="pun">(</span><span class="str">"Content-Type: application/json;charset=utf-8"</span><span class="pun">);</span>
)tutte le funzioni che usano i dati che ritorna l’ajax devono partire al termine dell’ajax, non darle per scontate prima.
il parametro che passi dentro alla success è la risposta che ti arriva, quindi se non lo passi non lo puoi usare, una volta ricevuto e solo allora, vai a settare chi deve contenerlo (variabili o altri input).
in genere togliti dall’idea del return nell’ajax, usa variabili comuni per il passaggio dati ma bada sempre con attenzione che ciò che fai deve avvenire dopo la success (temporalmente parlando).
Detto ciò fammi avere il console.log di data supponendo data la variabile che prendi da success ( ……success(data){console.log(data);}……. )
- AutorePost
- Devi essere connesso per rispondere a questo topic.