$.ajax({
type: "GET",
url: "auth/classes/",
async: true,
cache: false,
success: function(data){
var json=eval('('+data+ ')');
Ответ, который я получаю, это
{
"id":"1117",
"name":"London"
}
{
"id":"1118",
"name":"New York
}
{
"id":"1119",
"name":"California"
}
Я могу получить доступ к первому массиву, подобному json['id']
, json['name']
Как я могу повторить этот ответ?
Поэтому давайте сосредоточимся на вашей функции обработки успеха здесь. В частности, переданный ему аргумент data
. Если заголовком типа контента в ответе с сервера является application/json, тогда jQuery достаточно умен, чтобы понять это и передать объект javascript в качестве параметра data
.
Если вы не знаете, что передает ваш сервер, я рекомендую вам сделать следующее:
success: function(data){
console.log(data);
}
а затем осмотреть объект на консоли (я рекомендую Chrome, потому что у него есть отличный отладчик). Если вместо javascript-объекта вы получаете json как текст, тогда правильный способ его разбора:
var dataAsAnObject = JSON.parse(data);
// and accessing parts of the object once parsed, it depends on the object:
// you use [integer] to access arrays:
var thisIsTheThirdElementInAnArray = dataAsAnObject[3];
// you use ['string'] to access values by key in an associative array:
var thisIsTheValueOfKeyHello = dataAsAnObject['Hello'];
В вашем случае это не понятно, потому что то, что вы вставили, недействительно json. Но мой совет - просто пройти через отладчик и заглянуть в консоль, чтобы вы могли больше узнать об этом.
Если я правильно понял ваш вопрос, нет, вы не можете напрямую фильтровать такой массив json. Вы должны перебирать все json-объекты массива, чтобы искать те, которые соответствуют вашим критериям.
Например, при наличии допустимого массива объектов json, если вы хотите отфильтровать атрибут id и получить первый соответствующий, вы можете выполнить итерацию следующим образом:
function getCityById(data,ID) {
var found=false, i=0;
while (!found && i<data.length) {
if (data[i].id === ID) {
found=true;
} else {
i++;
}
}
if (found) {
return data[i];
} else {
return null;
}
}
Затем вы можете получить доступ к определенному идентификатору, например:
var city = getCityById(data, 1117);
if (city != null) {
var name = city.name; // should be "London"
}
не знаю, каков настоящий вопрос, и вы, конечно, не получаете ответ, который вы написали. возможно, вы получаете:
[{"id": "1117", "name": "London"}, {"id": "1118", "name": "New York"}, {"id": "1119", "name": "Калифорния"}]
массив? возможно, вы получаете массив как часть объекта? Я предполагаю, что этот странный результат имеет отношение к странному использованию eval
(я действительно не понял, что вы пытаетесь сделать с этим - разобрать JSON?)
но поскольку это, вероятно, массив, который вы могли бы перебирать с помощью обычного:
for (var i =0, i < data.length, i++) {
console.log(data[i].id); //etc.. do something usefull with the data
}