J'essaie d'accéder aux variables "dimensions" dans ma réponse ajax mais je ne peux pas l'obtenir. Je ne veux pas rendre cette variable globale. Voici mon code

  $(document).ready(function(){
  $('#submittext').click(function(){
   var dimensions;
   $.ajax({
     type: "GET",
     url: "bin/getcontentsize.php",
     data: findContentsize,
     success: function(response){
       //want to access dimensions here to assign response and some calculation(but not able to access it)
     }
     });
   //so i can use here
  });
  });
0
Ali Nouman 7 nov. 2011 à 20:17

4 réponses

Meilleure réponse

Dans ce cas, vous pouvez accéder à la variable dimensions à partir du rappel ajax et du code immédiatement après le démarrage de la demande ajax. La variable est accessible dans ces deux contextes.

Ce qui cause le plus probablement le problème, c'est le timing. La méthode success s'exécutera de manière asynchrone une fois la demande ajax terminée. Il est préférable de voir cela comme s’exécutant plus tard. Cependant, le code immédiatement après l'appel $.ajax s'exécutera immédiatement. Par conséquent, vous ne verrez aucun effet du gestionnaire success sur la variable dimensions lors de son exécution.

S'il y a du code que vous souhaitez exécuter avec la valeur de dimensions calculée par la méthode success, vous devez appeler ce code à partir du rappel success. Par exemple

$('#submittext').click(function(){

   var handleNewDimensions = function (dimensions) {
     // Code that used to be after the $.ajax line
   }

   $.ajax({
     type: "GET",
     url: "bin/getcontentsize.php",
     data: findContentsize,
     success: function(response){
       var dimensions = doTheCalculation(...);

       // Call the code which needs to deal with the new dimensions
       handleNewDimensions(dimensions);
     }
   });
7
JaredPar 7 nov. 2011 à 16:22

Problème lorsque vous l'exécutez.

$(document).ready(function(){
    $('#submittext').click(function(){
        var dimensions="1";
        $.ajax({
            type: "GET",
            url: "bin/getcontentsize.php",
            data: findContentsize,
            success: function(response){
                dimensions = "2";
            }
        });
        //!!!!Attention
        alert(dimensions);  // result is "1", not "2"
    });
});

Tout d'abord, votre code a déjà été exécuté. Après cela, votre $ .ajax commence à s'exécuter.

2
Kannika 7 nov. 2011 à 16:33

Cela devrait fonctionner:

  $(document).ready(function(){
  $('#submittext').click(function(){
   var dimensions = 1;
   $.ajax({
     type: "GET",
     url: "bin/getcontentsize.php",
     data: findContentsize,
     success: function(response){
       alert(dimensions);
     }
     });
   //so i can use here
  });
  });
1
PiTheNumber 7 nov. 2011 à 16:21

Attribuez à la variable de dimensions la valeur et testez-la à nouveau:

var dimensions="sample";
1
Rok Kralj 7 nov. 2011 à 16:20