2011-06-22 116 views
0

我試圖在getJson請求的grep中使用變量。我想要根據用戶的選擇(他們點擊的鏈接)定義變量 - 但我不知道如何將它傳遞給grep,因爲它似乎必須在getJson調用中定義變量?getJson grep中的變量作用域

第一個例子工程:

$.getJSON('data/all.json', function(data) 
    { 
    location = $.grep(data, function(el, i) 
    { 
     var search=el.clicked_field; 
     return search === "Y" 
     }); 
    }); 

這注:第二個犯規:

var search=el.clicked_field; 
$.getJSON('data/all.json', function(data) 
    { 
    location = $.grep(data, function(el, i) 
    { 
     return search === "Y" 
     }); 
    }); 

我想在這裏討論了jQuery論壇的問題: http://forum.jquery.com/topic/variable-scoping-and-the-getjson-method

但我沒去過能夠複製建議的解決方案。任何幫助將是太棒了...

回答

0

您正在定義el在第二個grep的回調中,這就是爲什麼它不在該範圍之外定義。

+0

我也試過創建這樣的變量 - var search ='el。' + clicked_field; 但這沒有工作...? – sharpiemarker1

0

這兩段代碼唯一明顯的區別就是var search=el.clicked_field$.grep的背景下移動到整個代碼體之前。那時,el還不存在。因此,除非您有其他一些代碼能夠涵蓋您的帖子中遺漏的代碼,否則這就是您的問題。

編輯:

一些JavaScript提示。變量是其全球範圍內的,所以採取例如以下:

$('#some-element').click(function() { 
    var someElement = $(this); 

    $.getJSON('url', function(data, jqXHR){ 
     console.log(someElement); // exists! 
    }); 
}); 

編輯:(再次)

好了,你有你的邏輯和語法的一些基本問題。這已經成爲一個有點乏味處理在評論的時候這一個方面,所以我只是要說明:

$('#some-element').click(function() { 
    var someElement = $(this).attr('href'); 

    // someElement == 'http://google.com' 

    $.getJSON('data/all.json', function(data) { 
     location = $.grep(data, function(el, i) { 
      clicked = someElement.toLowerCase().slice(1); 

      // clicked == 'ttp://google.com' # Why? 

      link = 'el' + '.' + clicked; 

      // link == 'el.ttp://google.com' # Why? 

      console.log(link); // This bit was for illustrative purposes, you should remove it from your code now. 
      return link === "Y"; 

      // "el.ttp://google.com" != "Y" # Obviously, and never will 
     }); 
    }); 

data是JavaScript對象的列表。傳遞給$.grep將導致它遍歷這些對象。每次迭代,當前對象將被存儲在el中,data數組內的該對象的索引將被存儲在i中。以JSON的該位作爲一個例子:

[ { "foo": 1, "bar": 2 } ] 

如果被返回的JSON,然後el將有兩個foobar的屬性,然後你可以用它來訪問每個的值,例如:

el.foo == 1 // True 
el.bar == 2 // True 

也許如果你真的發佈了你的JSON響應,我可能會進一步幫助你。 (更新您的問題,不要發佈它作爲評論)

+0

好的,是的 - 我回應了另一個指出這一點的迴應。我也嘗試在getjson之外構造變量 - var search ='el。' + clicked_field; 但這也沒有工作。 – sharpiemarker1

+0

是的,它不會。你爲什麼試圖在外面做呢? –

+0

因此,grep中使用的術語是基於用戶點擊的內容動態定義的 – sharpiemarker1