2011-06-22 10 views
0

getJsonリクエストのgrep内で変数を使用しようとしています。私は変数をユーザーの選択(クリックするリンク)に基づいて定義したい - しかし、変数がgetJson呼び出し内で定義されているように見えるので、grepに渡す方法がわからないのですか?getJson grepの可変スコープ

この最初の例で動作します。

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

この第二1つのdoesnt: http://forum.jquery.com/topic/variable-scoping-and-the-getjson-method

しかし、私はされてhaventは:

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

私は問題はjQueryのフォーラムで、ここで議論されたと思います提案されたソリューションを複製することができます。どんな助けも素晴らしいと思います...

答えて

0

grepのコールバックで2番目のコールバックにelを定義しています。その理由は、そのスコープの外では定義されていません。

+0

このような変数を作成しようとしました。 var search = 'el。' + clicked_field; しかし、それはどちらかというと...? – sharpiemarker1

0

2つのコードの唯一の明白な違いは、$.grepのコードボディ全体の前に、var search=el.clicked_fieldという文脈の動きです。その時点で、まだelは存在しません。だから、あなたの投稿に欠けているものをカバーする他のコードがなければ、それがあなたの問題です。

EDIT:

リトルJavaScriptの先端。変数は、それらの範囲内でグローバルであるので、次の例のために取る:

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

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

EDIT:(再び)

わかりましたので、あなたのロジックや構文でいくつかの基本的な問題を抱えています。少し退屈な取り扱いコメントに一度、この一つの局面になってきていますので、私はちょうど説明するつもりです:

$('#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

関連する問題