2012-05-31 4 views
0
function getCChatStatus() { 
    jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }).done(function(msg) { 
     var cChatStatus = jQuery.parseJSON(msg); 
     return cChatStatus; 
    }); 
} 

function CChatOptions() { 
    var test = getCChatStatus(); 
    alert(test); 
} 

retourne "test is undefined". Comment résoudre ce problème? J'ai déjà essayé async: false.Appel d'une fonction ajax au sein d'une fonction (jQuery)

Merci

+0

double possible de [Valeur de retour à l'intérieur de .ajax $() fonction] (http://stackoverflow.com/questions/8187201/return-value-from-inside-of-ajax-function) – JJJ

Répondre

0

Si vous utilisez des fonctions asynchrones telles que jQuery.ajax, vous devrez utiliser des fonctions de rappel pour évaluer les résultats.

Ainsi, votre getter doit être asynchrone:

function getCChatStatus(callback){ 
    jQuery.ajax({/*...*/}) 
    .done(function(){ 
    callback(jQuery.parseJSON(msg)) 
    }) 
} 

Et votre test devra ressembler à:

function CChatOptions() { 
    getCChatStatus(function(status){ 
    alert(status) 
    }) 
} 
+0

c'est fonctionnant, merci! – Chris

0

Votre fonction est getCChatStatus() rien de retour. Même avec async: false, votre fonction doit retourner la valeur de retour de l'appel $.ajax(). Envisagez de renvoyer l'objet observable réel que vous obtenez à partir d'un appel asynchrone $.ajax() et de l'utiliser, au lieu d'exécuter des requêtes AJAX synchrones.

1

La fonction ajax est encore asynchrone et has'nt retourné lorsque vous êtes appeler l'alerte.

function getCChatStatus(callback) { 
    jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }).done(function(msg) { 
     var cChatStatus = jQuery.parseJSON(msg); 
     callback.call(cChatStatus); 
    }); 
} 

function CChatOptions() { 
    getCChatStatus(function(test) { 
     alert(test); 
    }); 
} 

Vous pouvez également faire:

function getCChatStatus() { 
    var CChat = jQuery.ajax({ 
     type: "POST", 
     url: "index.php?page=CChatAction", 
     data: { action: "getStatus" } 
    }); 
    return CChat; 
} 

function CChatOptions() { 
    var cChatStatus = getCChatStatus(); 
    cChatStatus.done(function(msg) { 
     alert(jQuery.parseJSON(msg)); 
    }); 
} 
+0

2ème travaille, le premier ne semble pas fonctionner. Merci quand même! – Chris

-1

Essayez cela devrait fonctionner !!

function getCChatStatus() { 
     $.ajax({ 
      type: "POST", 
      url: "index.php?page=CChatAction", 
      success:function(msg){ 
      var cChatStatus = jQuery.parseJSON(msg); 
      alert(cChatStatus); //if this alert works then that test will work.. 
      return cChatStatus; 
     }); 
    } 

    function CChatOptions() { 
     var test = getCChatStatus(); 
     alert(test); 
    } 
+1

Je ne vois pas de différence avec mon code? – Chris

Questions connexes