2013-07-29 213 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; 
}