#javascript #html #jquery
#javascript
Вопрос:
У меня есть функция, которая объединяет результаты запроса AJAX.
По какой-то причине моя последняя строка начинается с «undefined».
Вот упрощенный пример, который воспроизводит проблему:
// In practice, fetched via AJAX from a server
var vendors = [{ id_vendor: 'V0001' }, { id_vendor: 'V0002' }];
var row_vendor;
vendors.forEach(function (value) {
row_vendor = value.id_vendor;
});
alert(row_vendor); // undefinedV0001V0002
Почему предупрежденное значение отображает начальное «неопределенное»?
Ответ №1:
Вы не инициализируете свою переменную, поэтому ее значение равно undefined
. Объединение строки приводит ее к строке "undefined"
перед конкатенацией.
Рассмотрим:
var x
alert(x "test") // undefinedtest
Вместо этого инициализируйте свою переменную пустой строкой перед выполнением конкатенации:
var x = ""
alert(x "test") // test
Обратите внимание, что функционально гораздо проще сначала извлечь интересующее вас свойство, а затем просто join
объединить их вместе:
$.map(vendor, function (v) { return v.vendor_id }).join('')
Ответ №2:
Вашей row_vendor
переменной не присвоено начальное значение, поэтому она запускается, undefined
а затем с помощью =
оператора для объединения строки результат undefined
становится строкой "undefined"
(плюс "v0001"
). Просто установите для него значение пустой строки при ее объявлении:
var row_vendor = "";
Ответ №3:
Проблема в этой строке
$.each(vendor, function(i, value) {
row_vendor = value.id_vendor;
});
Чтобы использовать row_vendor
для целей конкатенации, сначала вам нужно присвоить ему значение по умолчанию. Итак, что вам нужно сделать, это:
var row_vendor = ""; // set it to empty string by default
$.each(vendor, function(i, value) {
row_vendor = value.id_vendor;
});
В боковой заметке вы также можете объединить строку с помощью массива. Я предпочитаю так, потому что это более красиво и читаемо.
var row_vendor = []; // empty array
$.each(vendor, function(i, value) {
row_vendor.push(value.id_vendor);
});
console.log(row_vendor.join(",")); // this will separate each value with a comma