2011-09-23 91 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); 
        } 
       ); 
    }); 
});