Не могу разобрать массив объектов JSON - PullRequest
0 голосов
/ 10 июня 2011

Я повредил свой мозг при разборе объектов JSON.У меня есть этот js:

function get_cities(id) 
 {
    $('#def').hide();
    $('#cities').html('');
    $.get('/emprego/index.php/add/get_cities/'+id, null, onAjaxSuccess, "JSON" );
}
function onAjaxSuccess(data)
{
  $.each(data, function(key, val)
  {
    data.push("<option value='"+key+"'>"+val+"</option>");
  });
  $('#cities').append(data.join(''));
}

Этот код возвращает:

<select id="cities" name="cities">
[object Object],[object Object]
<option value="0">[object Object],[object Object]</option>
</select>

Но ответ сервера (я имею в виду ответ функции с параметром):

[[{"id":"1","name":"Lisboa"},{"id":"2","name":"Cascais"}]]

Как разобрать этот ответ на этот html:

<select id="cities" name="cities">
<option value="1">Lisboa</option>
<option value="2">Cascais</option>
</select>

Спасибо!

Ответы [ 4 ]

2 голосов
/ 10 июня 2011

Поскольку data является массивом с двойным заключением, вам придется запустить $.each на data[0]. Вы также захотите поместить результаты в массив holder вместо самого data. Затем вы захотите передать соответствующий ключ параметра val:

function onAjaxSuccess(data) {
    var holder = [];
    $.each(data[0], function(key, val) {
        holder.push("<option value='" + val.id + "'>" + val.name + "</option>");
    });
    $('#cities').append(holder.join(''));
}

См. Пример & # x2192;

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

Я считаю, что ответ сервера неправильный, слишком много '[' и ']'.

Должно быть так:

[{"id":"1","name":"Lisboa"},{"id":"2","name":"Cascais"}]

И эта строка:

data.push("<option value='"+key+"'>"+val+"</option>"); 

тоже неправильно, val есть объект.Должно быть:

data.push("<option value='"+key+"'>"+val.name+"</option>"); 
0 голосов
/ 10 июня 2011

Если то, что вы вставили для ответа сервера, является точным, это означает, что у вас есть два массива.

Итак, вам нужно сделать

var result = [];
$.each(data[0], function(opt) { // Get the info from the array inside the array
  // opt contains {id:1, name:'Lisboa'}
  result.push('<option value="' + opt.id + '">' + opt.name + '</option>');
});
$('#cities').append(result.join(''));

И, наконец, сохранить информацию о процессе вдругой массив (результат).

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

Во-первых, вы пытаетесь перебрать массив данных, но в то же время на каждой итерации вы пытаетесь вставить новый элемент в данные (массив, я предполагаю?)это не пойдет.

var newOptions = new Array();

$.each(data, function(key, val) {
    newOptions.push("<option value='" + key + "'>" + val + "</option");
});

посмотрим, что это сделает для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...