在javascript和ASP.NET AJAX中使用OO编程的问题

时间:2009-05-16 22:25:07

标签: asp.net javascript ajax web-services oop

我正在尝试保留尽可能多的OO,但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();

}

这是它的基础。所以基本上它是创建一个人并从服务器中检索他们的名字和姓氏,以便初始化这个人。

当我创建一个新人时,它会通过initializeStep1,调用服务器webmethod getFirstName,最终到达initializeStep2。警报(foundFirstName);工作,它提醒找到的名称,它是正确的...现在在将私有变量firstName设置为找到的内容后,我再次调用服务器...

这一次,它没有达到initializeStep3,我知道它不应该在服务器端失败,因为即使我替换了行

PeopleServices.getLastName(id, this.initializeStep3);

PeopleServices.getFirstName(id, this.initializeStep3);

它仍然不起作用。

我想知道在第一次服务器调用之后它是否丢失了对“this”的引用或类似于我无法按照我的方式调用initializeStep3的情况。有人有什么想法吗?

一些注意事项:

  • 我知道服务器webmethods都在工作,我已经单独测试过了。
  • 我不确定我的OO是否就在这里。
  • 我不确定我是否正确使用AJAX。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

你需要一个闭包

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