2013-07-29 124 views
0
(function() { 
    var id="test"; 
    $.ajax({ 
     context: this, 
     url : "http://weather.yahooapis.com/forecastrss", 
     success : function(data){ 
      this.id = "was test"; 
     } 
    }); 
    console.log(id); 
})(); 

上一個問題還不夠清楚,所以聽到的是問題究竟是什麼。當我在做console.log(id)它不顯示更改的值。我想得到的是id的更改值。我怎樣才能做到這一點,我已經嘗試了評論中的所有解決方案以及給出的答案,但是沒有一個適合我?如何訪問對象函數(javascript)中的對象變量?

jsFiddle將不勝感激。

+0

看一看這個http://stackoverflow.com/問題/ 111102/how-do-javascript-closures-work – davy

+0

你有語法錯誤,請使用你的控制檯 –

+0

@roasted我看不到那個,那是哪裏? –

回答

1

getTodayCats

var self = this; 

然後當需要訪問IDS,你應該得到這樣的:

self.ids 

自我的使用,這模式是在這種情況下製作的,因爲您需要在異步回調處理程序(aj)中訪問的屬性斧頭成功)。用於異步回調的處理程序在沒有原始對象的情況下被調用,所以這用於利用函數的閉包來傳遞原始對象。

在jQuery的AJAX方法的情況下,你也可以使用背景選項中,將用於其回調處理程序對象通過。你是否使用它取決於你。我個人不喜歡,因爲這不是其他異步處理程序的選項,例如超時和間隔,我更願意保持一致。

+1

$ .ajax得到一個選項,'上下文'選項 –

+0

謝謝你提到這一點。 –

-1

嘗試使用這樣的事情...

${variable}

+0

大聲笑是什麼答案:P –

0
$.ajax({ 
    url: "http://localhost/woodenspoon/getTodaysCats.php", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    responseType: "json", 
    context: this, 
    success: function (data) { 

     this.ids = "ok"; 

    } 
}); 
+0

你說什麼關於更新的代碼,我試過你的方式,但它不適合我! –

0

訪問 「IDS」 這way-

getTodaysCats: function() { 

    var args = Array.prototype.slice.call(WinJS.UI.Pages.define.arguments); 
    var ids = args[1].ids; 
    $.ajax({    
     ... 
     , success: function (data) { 
      var arr = new Array(1,2,3,4,5); 
      foreach(var num in arr) 
       ids += "ok";  
     } 
    }); 

    return ids; 
}