#jquery #json
#jquery #json
Вопрос:
Прямо сейчас ответ 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));
};
});
теперь та же переменная переходит в значение и название опции, мне нужно указать код страны в опции и название страны в переменной.
Комментарии:
1. Похоже, что вы отправляете двухбуквенную аббревиатуру вместе с полным названием страны, но не используете аббревиатуру, вы собираетесь использовать ее, или вы можете вообще не отправлять ее?
Ответ №1:
Почему бы не вернуть их в первую очередь как объекты 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)
);
});
Редактировать:
Приведенный выше код предполагает, что вы уже преобразовали данные, отправленные с сервера, в массив JavaScript. Есть два способа приблизиться к этому:
- Вы можете запросить данные, используя
getJSON
метод, и jQuery проанализирует возвращаемое значение для вас - Вы можете проанализировать данные самостоятельно, используя
parseJSON
Любой метод примет правильно отформатированную строку JSON и вернет вам объект JavaScript для работы
Ответ №2:
Если вы выберете свой 2-й вариант, вы можете разделить строку как таковую
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 и выполнять цикл по нему. Смотрите мой обновленный код выше.
Комментарии:
1. Что это делает, это
<option value="A">G</option>
нарушение двухбуквенного кода страны для значения и имени2. Ему не обязательно его анализировать, он мог бы использовать метод getJSON , и это произошло бы автоматически.
3. @R0MANARMY: Да, это просто вызовет parseJSON внутренне 🙂
4. Скорее всего, но это на одну вещь меньше, о которой ему нужно беспокоиться :).
Ответ №3:
Если вы можете сделать это:
[["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]));
};
});
Комментарии:
1. мой вывод выглядит не так, он заключен в двойные кавычки каждый раз, когда я пишу в json, поэтому он выглядит как [«[AG, АНТИГУА И БАРБУДА]», «[AU, АВСТРАЛИЯ]», «[BR, БРАЗИЛИЯ]», «[CA, КАНАДА]»] и выводит первую букву в названии опции и в значении «[»
Ответ №4:
Если вы хотите воспользоваться этим:
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" }
];
Обновление: Если все, что вас волнует, это добавление их в select, вы можете сделать это таким образом:
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 во время добавления опций, а затем прикрепите его обратно в конце.
Комментарии:
1. что мне делать после этого, мне нужно окончательное решение, я не так хорошо знаю jquerry
2. Обновлено, чтобы предоставить вам решение, которое вам нужно (я думаю).