Как исправить ошибку в JS функции?
При выполнении вылетает ошибка: TypeError: Cannot read property 'replace' of null (строка 16,
Код:
var doc = SpreadsheetApp.getActiveSpreadsheet();
try {
var s_settings = doc.getSheetByName("Settings");
s_settings.clear();
}
catch(e) {
var s_settings = doc.insertSheet();
s_settings.setName("Feed");
}
function trim( str, charlist ) {
charlist = !charlist ? ' \\s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
return str.replace(re, '');
}
function strip_tags( str ) {
str = str.replace(/<style[^>]+>[^<]+<\/style>/gi, '');
str = str.replace(/ /gi, ' ');
str = trim(str);
return str.replace(/<\/?[^>]+>/gi, '');
}
function parseXml() {
var url = 'https://mebelmassive.ru/index.php?route=extension/feed/yandex_yml';
var xml = UrlFetchApp.fetch(url).getContentText();
var document = XmlService.parse(xml);
var root = document.getRootElement();
var ns = XmlService.getNamespace('http://www.w3.org/1999/xhtml');
Logger.log(ns);
var entries = document.getRootElement().getChildren();
Logger.log(entries);
var orders = entries[0].getChildren('offers')[0].getChildren('offer');
Logger.log(orders);
var categories = entries[0].getChildren('categories')[0].getChildren('category');
var aCategory = {};
for (var i = 0; i < categories.length; i++) {
var id = categories[i].getAttribute('id').toString().split("'")[1];
var text = categories[i].getText();aCategory[id] = text;
}
var rows = [];
rows.push(['id','link','item category','title','image_link','price', 'condition', 'availability', 'description']);
for (var i = 0; i < orders.length; i++) {
var id = orders[i].getAttribute('id').toString().split("'")[1];
var url = orders[i].getChildText('url').toString().trim();
var cat = aCategory[orders[i].getChildText('categoryId').toString()];
var name = orders[i].getChildText('name');
var pic = orders[i].getChildText('picture').toString().trim();
var currencyId = orders[i].getChildText('currencyId').toString().trim();
var price = orders[i].getChildText('price').toString()+' '+currencyId;
var description = strip_tags(orders[i].getChildText('description'));
var newRow = [id, url, cat, name, pic, price, 'new', 'in stock', description];
rows.push(newRow);
}
Logger.log(rows[rows.length-1]);
s_settings.getRange(1,1,rows.length, 9).setValues(rows);
}
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Ошибку исправить просто: надо подать на вход строку. А в функцию прилетает null. Как исправить null: смотрите почему у вас прилетает null на вход. Или хотя бы предусмотрите вариант, что если значение null, то передать пустую строку на вход, например
strip_tags(orders[i].getChildText('description') ?? '');
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Operators/Nullish_coalescing_operator
Также смотрите познавательную тему: Как и какими средствами находить ошибки в Javascript коде?