2011-09-23 92 views
0

我建立了下列对象:一个Ajax调用后调用的对象返回

var cls = { 
    offset : 0, 
    onSuccess : function(data) { 
     alert(this.offset); 
    } 
}; 

$(document).ready(function(){ 
    $("form").submit(function() { 
       $.post(
        "/ajax", 
        {}, 
        cls.onSuccess 
       ); 
    }); 
}); 

当AJAX回报和clsonSuccess被称为然后我得到的undefined警报。

如果我只是打电话cls.onSuccess()那么警报返回0预期。这种行为的任何理由?

回答

1

您需要为AJAX函数提供回调的上下文。我会使用.ajax()而不是.post()并将cls作为上下文来传递:

$.ajax({ 
    url: "/ajax", 
    context: cls, 
    type: "POST", 
    success: cls.onSuccess 
}); 
1

this不再是你的对象cls了。您正在传递函数引用onSuccess以进行邮寄呼叫。

2

不要使用“this”。它不会提及你期望提及的内容。

use window.alert(cls.offset);

这是很长的解释,但这应该对你有帮助。

0

你正在传递的功能,独立于对象。如果将它包装在一个函数中,它应该可以工作:

$(document).ready(function(){ 
    $("form").submit(function() { 
       $.post(
        "/ajax", 
        {}, 
        function(data){ 
         cls.onSuccess(data); 
        } 
       ); 
    }); 
});