2015-11-19 69 views
2

我需要將外部變量傳遞給jQuery Ajax的成功函數。我的AJAX是在一個循環中,像這樣:我可以爲某個函數綁定「this」以外的其他東西嗎?

var props = ['a', 'b', 'c']; 

var results = 
{ 
    a: null, 
    b: null, 
    c: null 
}; 

for(var key in props) 
{ 
    var prop = props[key]; 

    $.ajax(
    { 
     url: 'someurl', 

     data: 
     { 
      somedata: 'somevalue' 
     }, 

     success: function(data, status, xhr) 
     { 
      // This here does not work properly, because the prop's value changes 
      // Due to promise stuff 
      results[prop] = data; 
     } 
    }); 
} 

我需要的東西,在正確的位置在成功返回的數據,但實現上述不起作用,因爲成功之前prop變化值被調用。

我發現我可以「繞過」這個問題通過綁定成功,函數的這個與道具,像這樣:

success: function(data, status, xhr) 
{ 
    results[this] = data; 
}.bind(prop) 

但是,這似乎是一個非常好的主意不和之外,我可以只綁定一個變量,如果需要的話不是多個。

這似乎並不工作之一:

success: function(data, status, xhr) 
{ 
    var privprop = prop; 
    results[privprop] = data; 
} 

所以基本上是給每個成功回調「私有」變量的最佳方式,該值是什麼道具的價值是當整個AJAX被做了?我可以以某種方式綁定多個變量並覆蓋this以外的東西嗎?

回答

6

嘗試通過做這樣的事情來限制每個prop變量的範圍爲特定的ajax:

for(var key in props) 
{ 
    var prop = props[key]; 

    (function(prop){ 


     $.ajax(
     { 
      url: 'someurl', 

      data: 
      { 
       somedata: 'somevalue' 
      }, 

      success: function(data, status, xhr) 
      { 
       // This here does not work properly, because the prop's value changes 
       // Due to promise stuff 
       results[prop] = data; 
      } 
     }); 
    })(prop); 
} 
+0

打我吧,http://jsfiddle.net/nyq01ysk/。 –

+0

是的.. @RoryMcCrossan – void

+1

你可以談談:你正在使用的技術名稱是什麼:'(function(prop){..........})(prop)' –

相關問題