Utiliser une variable globale après sa mise à jour dans une réponse
Bonjour,
Après plusieurs recherches, je ne parviens pas à mettre à jour une variable globale javascript à la sortie de ma requête Ajax.
Voici l'explication de ce que je cherche à faire :
Sur un évènement (ici avant chaque upload d'un fichier), si c'est le premier fichier et qu'aucun album n'est choisi, je souhaite appeler la fonction "createAlbum()" qui va exécuter une requête Ajax pour créer l'album en BDD et me fournir l'ID de l'album crée dans la réponse AJAX
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
var _nSelectedAlbumID = -1;
jQuery('#toUpload').on('filepreupload', function(event, data, previewId, index)
{
console.debug("filepreupload");
if (index == 0 && _nSelectedAlbumID == 0)
{
createAlbum(_sSelectedAlbumName, _sSelectedAlbumDescription);
}
console.debug("AlbumID = " + _nSelectedAlbumID);
data.form.append('nAlbumID', _nSelectedAlbumID);
});
function createAlbum(sAlbumName, sAlbumDescription)
{
console.debug("create album start");
jQuery.ajax(
{
type : "POST",
url : "index.php",
dataType: "json",
async : false,
data :
{
'view' : 'photos',
'action' : 'createAlbum',
'albumName' : sAlbumName,
'albumDescription' : sAlbumDescription
},
success : function(response)
{
if (response.success) { _nSelectedAlbumID = response.nAlbumID; console.debug("create album response : " + _nSelectedAlbumID); }
}
});
} |
Dans le success, je récupère bien l'ID du nouvel album crée.
Par contre, quand je fais
Code:
console.debug("AlbumID = " + _nSelectedAlbumID);
après l'appel de la fonction createAlbum(), ma variable _nSelectedAlbumID est toujours à -1 ???
NB : En mettant la propriété "async : false" dans ma requête AJAX, l'ordre des appels est bien respecté.
En effet, avec mes "console.debug", j'obtiens bien :
Citation:
filepreupload
create album start
create album response (avec l'ID du nouvel album)
AlbumID = (avec un ID à -1)
Je ne peux et je ne souhaite pas faire la suite de mes traitements dans le "success" de ma fonction createAlbum().
Quel est donc le moyen pour que je puisse :
- appeler ma fonction createAlbum()
- mettre à jour ma variable "_nSelectedAlbumID" dans le "success" de la fonction
- ensuite utiliser cette variable "_nSelectedAlbumID" dans des traitements appelés après la fonction
Merci d'avance de vos réponses,
Nicolas
Utiliser une variable globale après sa mise à jour dans une réponse AJAX
Pour précision, si au lieu de faire appel à ma fonction createAlbum(), j'insère directement "mon code" dans l'évènement, la variable "_nSelectedAlbumID" est bien mis à jour !
En effet, ce code fonctionne correctement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
|
jQuery('#toUpload').on('filepreupload', function(event, data, previewId, index)
{
console.debug("filepreupload");
if (index == 0 && _nSelectedAlbumID == 0)
{
console.debug("create album start");
jQuery.ajax(
{
type : "POST",
url : "index.php",
dataType: "json",
async : false,
data :
{
'view' : 'photos',
'action' : 'createAlbum',
'albumName' : _sSelectedAlbumName,
'albumDescription' : _sSelectedAlbumDescription
},
success : function(response)
{
if (response.success)
{
_nSelectedAlbumID = response.nAlbumID;
console.debug("create album response : " + _nSelectedAlbumID);
}
}
});
}
console.debug("AlbumID = " + _nSelectedAlbumID);
}); |
Pourquoi, en mettant ce "bloc" dans une fonction, la variable "_nSelectedAlbumID", n'est plus correcte ? :?:(