2009-05-16 6 views
0

J'essaie de garder autant que possible OO, mais ASP.NET AJAX semble être faire quelque chose d'étrange après le retour du serveur ...problème avec la programmation orientée objet en javascript et ASP.NET AJAX

function Person(personId) { 
var id = personId; 
var firstName; 
var lastName; 

this.initializeStep1 = function() { 
    PeopleServices.getFirstName(id, this.initializeStep2); 
} 

this.initializeStep2 = function(foundFirstName) { 
    alert(foundFirstName); 
    firstName = foundFirstName; 
    PeopleServices.getLastName(id, this.initializeStep3); 
} 

this.initializeStep3 = function(foundLastName) { 
    alert(foundLastName); 
    alert(firstName); 
    lastName= foundLastName; 
} 

this.initializeStep1(); 

}

Ceci est la base de celui-ci. Donc, fondamentalement, il crée une personne et récupère son prénom et son nom sur le serveur afin d'initialiser la personne.

Lorsque je crée une nouvelle personne, elle passe par initializeStep1, appelle le serveur webmethod getFirstName et finit par atteindre initializeStep2. l'alerte (foundFirstName); fonctionne, il alerte le nom qui a été trouvé et il est correct ... maintenant après avoir défini la variable privée firstName à ce qui a été trouvé, je fais un deuxième appel au serveur ...

Cette fois, il n'atteint pas initializeStep3, et je sais qu'il ne devrait pas avoir échoué sur la fin du serveur parce que même si je remplace la ligne

PeopleServices.getLastName(id, this.initializeStep3); 

avec

PeopleServices.getFirstName(id, this.initializeStep3); 

ne fonctionne toujours pas. Je me demandais si après le premier appel du serveur il a perdu la référence à "ceci" ou quelque chose de similaire à ce qui s'est passé où je ne peux pas appeler initializeStep3 comme je suis. Quelqu'un a des idées?

quelques notes:

  • Je sais que le webMethods serveur fonctionnent tous, je les ai testés individuellement.
  • Je ne suis pas sûr si mon OO est juste ici.
  • Je ne suis pas sûr si je vais à propos de AJAX soit non plus.

Merci pour votre aide!

+0

J'espère que c'est juste un exemple, parce que dans le monde réel, il n'y aurait aucune raison de tout simplement pas renvoyer une personne entière. –

+0

C'est. Ce que je suis en train de faire ne peut pas être transformé en objet pour renvoyer plus de données sans que cela n'ait aucun sens. –

Répondre

3

Vous avez besoin d'une fermeture

var that = this; 
PeopleServices.getFirstName(id, function (x) { 
            that.initializeStep3(x); 
           } 
); 
Questions connexes