Как разделить ответ json на две переменные? - PullRequest
0 голосов
/ 08 мая 2011

Прямо сейчас ответ json выглядит как

["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"] 

я могу сделать это

["AG,ANTIGUA AND BARBUDA","AU,AUSTRALIA","BR,BRAZIL","CA,CANADA"]

, если так проще работать, или любой другой стиль.

мне нужно разделить его на две переменные, одна для кода округа, другая для названия страны

   ...success: function( json ) {
    $.each(json, function(i, value) {
          $('#country').append($('<option>').text(value).attr('value', value));
    };  
      });

теперь та же самая переменная входит в значение и имя опции, мне нужно указать код страны в опции и название страны в переменной.

Ответы [ 4 ]

4 голосов
/ 08 мая 2011

Почему бы не вернуть их как объекты JSON? Что-то вроде

[{"ID":"AG", "Text":"ANTIGUA AND BARBUDA"},{"ID":"AU", "Text":"Australia"}]

Тогда вы могли бы сделать что-то вроде

$.each( result, function( value ){
    $('#country').append(
        $("<option>").text(value.Text).attr("value", value.Text)
    );
});

EDIT: Приведенный выше код предполагает, что вы уже преобразовали данные, отправленные с сервера, в массив JavaScript. Есть два подхода к этому:

  1. Вы можете запросить данные, используя метод getJSON, и jQuery проанализирует возвращаемое значение для вас
  2. Вы можете проанализировать данные самостоятельно, используя parseJSON

Любой метод примет хорошо отформатированную строку JSON и вернет вам объект JavaScript для работы с

1 голос
/ 08 мая 2011

Если вы выберете второй вариант, вы можете разделить строку как таковую

var countries = jQuery.parseJSON(json);
$.each(countries, function(i, value) {
    var country = value.split(",");
    $('#country').append($('<option>').text(country[1]).attr('value', country[0]));

};

РЕДАКТИРОВАТЬ: сначала необходимо проанализировать строку JSON, поэтомуВы можете использовать объект Array и проходить по нему.Смотрите мой обновленный код выше.

0 голосов
/ 08 мая 2011

Если вы хотите взять это:

var array = ["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"];

и сделать его массивом пары ключей / значений, вы можете сделать что-то вроде этого:

result = [];

for (var i = 0; i < array.length; i = i + 2) {
  result.push({ array[i] : array[i + 1]});
}

Вы будетев итоге получим эквивалент этого в result:

result = [
  { "AG" : "ANTIGUA AND BARBUDA" },
  { "AU" : "AUSTRALIA" },
  { "BR" : "BRAZIL" },
  { "CA" : "CANADA" }
];

Обновление: если все, что вам нужно, это добавить их в избранное, вы можете сделать это так:

var array = ["AG","ANTIGUA AND BARBUDA","AU","AUSTRALIA","BR","BRAZIL","CA","CANADA"];

for (var i = 0; i < array.length; i = i + 2) {
  // Using this object initializer to build the options has a caching benefit.
  $('#country').append($('<option>', {
    value: array[i],
    text: array[i + 1]
  }));
}

Для чего бы это ни стоило, в этом случае оно может быть незначительным, но этот подход относительно медленный.Если вы заметили проблемы с производительностью, используйте метод .detach() для извлечения #country из DOM во время добавления параметров, а затем присоедините его в конце.

0 голосов
/ 08 мая 2011

Если вы можете сделать это:

[["AG","ANTIGUA AND BARBUDA"],["AU","AUSTRALIA"],["BR","BRAZIL"],["CA","CANADA"]] 

Тогда вы можете использовать это:

success: function( json ) {
  $.each(json, function(i, value) {
    $('#country').append($('<option>').text(value[1]).attr('value', value[0]));
  };  
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...