переменная область действия в grep getJson - PullRequest
0 голосов
/ 22 июня 2011

Я пытаюсь использовать переменную в grep запроса getJson.Я хочу, чтобы переменная определялась на основе выбора пользователя (ссылка, по которой он щелкает), но я не уверен, как передать ее в grep, потому что кажется, что переменная должна быть определена в вызове getJson?

Этот первый пример работает:

$.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

Но я не смог повторить предложенное решение.Любая помощь была бы фантастической ...

Ответы [ 2 ]

0 голосов
/ 22 июня 2011

Единственная очевидная разница в двух частях кода - это перемещение 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 будет иметь атрибуты foo и bar, которые вы затем сможете использовать для доступа кзначения каждого, например:

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

Возможно, если вы действительно разместите свой ответ JSON, я мог бы помочь вам в дальнейшем.(Обновите свой вопрос, не оставьте его как комментарий)

0 голосов
/ 22 июня 2011

вы определяете el в обратном вызове grep во втором, поэтому он не определен вне этой области.

...