2015-03-29 15 views
0
function loadResponse(filter) { 
    $.ajax({ 
     type: 'GET', 
     url: 'path/to/example.json', 
     dataType: 'json', 
     cache: false, 
     beforeSend: function() { 
      console.log('loading'); 
     }, 
     success: function (response) { 
      //console.log('success, filtering response..'); 

      var filtered = $(response).filter(function (i, n) { 
       return n.type === filter; //not working 
      }); 
      console.log('filter by json ' + filtered); 

      for (var key in filtered) { 
       if (filtered.hasOwnProperty(key)) { 
        console.log('list ' + filtered[key]["description"]); 
        console.log('list ' + filtered[key]["name"]); 

       } 
      } 
     } 
    }); 
} 

console.log все время давал undefined для описания или названия. Но тем не менее я тестировал без:Почему не удается получить доступ к json?

var filtered = $(response).filter(function (i,n) { 
    return n.type === filter; //not working 
}); 

возможность получить описание и имя в console.log. Кажется, $(response).filter не возвращает somthing. не уверен, где это пошло не так.

Update

См JSON - ответ должен распечатать имя и тип. поэтому нужно фильтровать тип внутри JSON

[ 
    { 
     "name": "Jonathan Suh", 
     "type": "zoologist, hobbyist" 
    }, 
    { 
     "name": "William Philbin", 
     "type": "judge, hobbyist" 
    }, 
    { 
     "name": "Allison McKinnery", 
     "type": "hobbyist" 
    } 
    ]; 



    $('.filter a').on('click', function(e){ 
     e.preventDefault(); 
     loadResponse($(this).attr('id')); 
     }); 

Пример:

<a href='#' id="hobbyist">Hobbyist</a> 

Так нажмите на это выше, он должен дать мне список 3-х человек, которые аквариумисты.

+2

Что 'filter' означало быть там? – arkascha

+0

вам нужно будет показать нам, что такое «ответ» от ajax. (*, а также переменная 'filter' *) –

+0

@arkascha - нужно фильтровать по типу, совпадающему с атрибутом click по id, чтобы получить информацию от конкретных людей в списке по определенному типу – joe

ответ

1

Согласно API фильтра будет:

Reduce the set of matched elements to those that match the selector or pass the function's test.

(курсив мой)

Я думаю, что он работает на элементах DOM не объекты JSON

Вы можете попробовать использовать jquery.grep()

ОБНОВЛЕНО

Пример использования grep() -> См консоль для выходов при нажатии

$(function() { 
 
    var arr = [{ 
 
    "name": "Jonathan Suh", 
 
    "type": "zoologist, hobbyist" 
 
    }, { 
 
    "name": "William Philbin", 
 
    "type": "judge, hobbyist" 
 
    }, { 
 
    "name": "Allison McKinnery", 
 
    "type": "hobbyist" 
 
    }]; 
 

 
    var doFilter = function(arr, filterParam) { 
 
    return jQuery.grep(arr, function(n, i) { 
 
     console.log(n.type.indexOf(filterParam)); 
 
     return (n.type.indexOf(filterParam) > -1); 
 
    }); 
 
    }; 
 

 

 
    $(".filter").on('click', function() { 
 
    var filterName = $(this).attr('id'); 
 
    console.log(filterName); 
 
    if (filterName) { 
 
     var filteredResults = doFilter(arr, filterName); 
 

 
     console.log(filteredResults); 
 

 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<h3>See console for outputs when clicking</h3> 
 
<a href='#' class="filter" id="hobbyist">Hobbyist</a> 
 
<br/> 
 
<a href='#' class="filter" id="judge">Judge</a>

+0

Я попробовал это, как вы и предложили, но он тоже ничего не возвращает. больше как ничего не делает – joe

+0

Как вы его используете? Я добавил примерную реализацию ... Надеюсь, это поможет вам, например, – ochi

+0

. Один qn является arr, если это внешняя ссылка на json-файл, как получить доступ к arr внутри события click? – joe

Смежные вопросы