2010-08-04 6 views
3

Je veux que la fonction check_membership() ci-dessous retourne les "données" AJAX. Toutefois, "result" continue d'être défini sur l'objet XHR et non sur l'objet JSON renvoyé.Comment renvoyez-vous les données d'un événement de succès AJAX à la fonction externe?

Comment résoudre ce problème?

function check_membership() { 

    var result; 

    result = jQuery.ajax({ 
     type: 'POST', 
     url: '/ajax/member', 
     dataType: 'json', 
     async: false, 
     success: function(data) { 
      return data; 
     } 
    }); 

    return result; 

}

Merci.

+1

Il semble que l'instruction "return data" ne fonctionne pas comme on pourrait s'y attendre. Donc, j'ai changé cette ligne pour "résultat = données" et les choses fonctionnent maintenant. – JMan

Répondre

2

Javascript ne « attendre » pour le rappel de succès de .ajax de $ au feu avant de revenir de la fonction principale, donc il y a une bonne chance que rien ne sera retourné. Vous devrez soit utiliser un appel synchrone-Jax en définissant l'option async sur false (ce qui bloquera le navigateur pour la durée de la demande) ou réviser votre stratégie, par ex. en faisant ce que vous voulez finalement faire au sein de le rappel de succès. Par exemple:

function update_membership_status() { 
    jQuery.ajax({ 
     type: 'POST', 
     url: '/ajax/member', 
     dataType: 'json', 
     success: function(json) { 
      $("#status").text('Signed In:' + json.SignedIn + " msg" + json.msg); 
     } 
    }); 
} 
+0

Malheureusement, cela ne fonctionne toujours pas. Pourriez-vous s'il vous plaît jeter un oeil à mon code mis à jour ci-dessus? "Résultat" est toujours défini sur l'objet XHR et non sur l'objet JSON renvoyé. – JMan

+0

Je l'ai compris. Voir mon commentaire ci-dessus. Il semble que le retour de données à l'intérieur d'un rappel ne se comporte pas comme prévu. – JMan

0

Vous pouvez utiliser async propriété pour renvoyer des données de manière synchrone:

function check_membership() { 
    var result = jQuery.ajax({ 
     type: 'POST', 
     url: '/ajax/member', 
     dataType: 'json', 
     async: false 
    }); 
return result.SignedIn; 
} 
+0

Je mets la fonction d'alerte là-bas à des fins de débogage. Je veux juste check_membership() pour retourner les "données" AJAX. – JMan

+0

oh désolé, ce n'était pas assez clair. J'ai expliqué une autre solution dans le post mis à jour. vérifier celui-ci. –

+0

J'ai ajouté "async: false" (voir le code mis à jour ci-dessus) et toujours le même résultat. – JMan

1
var result = 
{ 
    ajax: function(){ 
     jQuery.ajax({ 
     type: 'POST', 
     url: '/ajax/member', 
     dataType: 'json', 
     async: false, 
     success: function(data) { 
       return data.signedIn; 
     } 
    }); 
    } 
} 

puis appelez result.ajax(); par quoi que ce soit

Questions connexes