2010-08-30 32 views
2

我正在製作一個腳本,每個函數中都有一個ajax調用。問題是,在從ajax調用成功回調時,我想使用我們在每個函數中使用的對象。如何在jQuery上引用該對象?

編輯: 下面是我的一些代碼:

configs={ 
    general:{ 
    max_ads:6}, 
    logs:{ 
    selector:"div#MicrodualGetAd-debug"}, 
    connection:{ 
    type:"POST", 
    url:"http://www.microdual.com/api/microdualgetad", 
    cache:false, 
    timeout:20000, 
    dataType:"json", 
    data:{ 
     adget_id:null, 
     adget_session:null, 
     client_action:null}, 
    error:function(r,s,e){ 
     MicrodualGetAdLog("Ajax-Error: "+s+"\n"); 
    } 
    } 
}; 


$("div.MicrodualGetAd").each(function(){ 
    configs.connection.data.adget_id = $(this).attr("rel"); 
    configs.connection.data.client_action = "view"; 
    configs.connection.data.success = function(d,s,r){ 
    $(this).hide(); 
    alert("'OK'"); 
    if(d.hackattemp.status){ 
     MicrodualGetAdLog("MicrodualGetAd-Error: "+d.hackattemp.msg+"\n"); 
     $(this).append(d.hackattemp.msg); 
    } 
    } 
    $.ajax(configs.connection); 
}); 

回答

4

您需要保存只是你each回調內部的this值。

$("#hello").each(function() { 
    var that = this; 

    $.ajax({ 
     url: "www.mysite.com/mypage", 
     success: function(d) { 
      hello.call(that); 
     } 
    }); 
})​ 

此外,你應該檢查d的值不同;無論是

if (typeof d === 'undefined' && d !== '') ... 

或者乾脆

if (d) ... 

編輯1:這應該工作,假設你有越來越的this權價值的唯一問題:

$("div.MicrodualGetAd").each(function() { 
    var $this = $(this); 
    configs.connection.data.adget_id = $this.attr("rel"); 
    configs.connection.data.client_action = "view"; 
    configs.connection.data.success = function(d, s, r) { 
     $this.hide(); 
     alert("'OK'"); 
     if (d.hackattemp.status) { 
      MicrodualGetAdLog("MicrodualGetAd-Error: " + d.hackattemp.msg + "\n"); 
      $this.append(d.hackattemp.msg); 
     } 
    } 
    $.ajax(configs.connection); 
});​ 
+0

我已將我的問題編輯到我的部分代碼中,以便您理解。我的例子有點不好,對不起。 – CuSS 2010-08-30 14:23:01

+0

@CuSS - 請參閱我的編輯。假設代碼的其餘部分起作用,那麼實際上沒有太大區別。 – 2010-08-30 14:27:04

+0

它的工作...解釋我的東西,爲什麼你把var的名稱之前的jQuery var? – CuSS 2010-08-30 14:29:34

相關問題