2009-09-30 9 views
0

Désolé si cette question est en double mais je n'ai pas pu résoudre mon problème à partir d'autres solutions.Retour de la valeur de la requête AJAX dans une variable globale

J'ai ce code dans un fichier sepate inclus dans mon index principal:

var getSuggestedData = {  
serviceURL: $("input[name=suggestedServices]").val(), 
dataR:"",  
doRequest:function(){ 
    //request data to controller 
    $.ajax({ 
     url:this.serviceURL, 
     success:function(msg){    
      this.dataR = msg;    
     }   
    })     
} 

}

Quand je suis en train d'obtenir la variable « Datar » de mon index cette façon, il est INDÉFINI! S'IL VOUS PLAIT, quelqu'un peut-il m'aider?

$().ready(function() { 
getSuggestedData.doRequest(); 
alert(getSuggestedData.dataR); 

});

Merci d'avance!

Répondre

0

La raison pour laquelle vous ne pouvez pas accéder à l'objet dataR est qu'il n'est pas dans le même contexte que le résultat renvoyé par la méthode de succès.

Une technique consiste à tenir une référence à la présente dans une variable comme indiqué ci-dessous:

var self = this; 

using the jquery library! 
    $(this.button).bind('click',{self:this},function(event) 
    { 
     var that = event.data.self; 
     alert(that.num); 

    }); 

Vous pouvez également consulter le post ci-dessous dans laquelle je l'ai expliqué en détail sur le mot clé « this ».

http://azamsharp.com/Posts/57_I_mean__this__not__this_.aspx

+0

Salut, désolé mais je ne comprends pas complètement votre suggestion. Pouvez-vous voir mon code et m'expliquer ce que je fais mal? Si j'avertis this.dataR dans la fonction de réussite, j'obtiens la valeur correcte, mais si j'essaie de faire ça ailleurs, je ne peux pas obtenir cette valeur ... que dois-je faire? Je vous remercie. – Teknotica

+0

Essayez l'approche suggérée par meder et faites-le nous savoir! – azamsharp

0

Si ma mémoire est bonne ...

this.dataR = msg; 

doit probablement être

getSuggestedData.dataR = msg 

'ceci' référence serait de l'objet envoyé à jQuery, vous besoin de référencer l'objet original. J'oublie si vous pouvez y accéder directement par son nom ou si vous avez besoin d'une autre méthode, faites-moi savoir si ça ne marche pas.

+0

Salut Meder, J'ai essayé votre chemin et le résultat est le même. J'ai essayé ensuite d'imprimer le résultat dans un champ de texte et comme je le pensais, quand j'alerte la variable les valeurs n'ont pas encore été assignées et sont vides ... alors, que recommandez-vous? Merci! – Teknotica

+0

Pouvez-vous mettre à jour votre description avec votre nouveau code? Que se passe-t-il si vous alertez (getSuggestedData) à l'intérieur de la fonction de rappel? –

+0

Aussi, vous devriez faire $ (function() {/ * code * /}); , la convention standard. –

Questions connexes