01.04.2020, 00:24
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
Нужна помощь по ВК АПИ
Друзья, в общем, я новичок, сильно не матюкайтесь))
Пишу скрипт для управления подписчиками сообщества и запнулся на этапе удаления подписчиков из группы. Суть в том, что нужно удалять конкретного юзера по нажатию кнопки, но почему-то удаляется рандомный юзер... Что делаю не так?
Код:
<!DOCTYPE html>
<html>
<head>
<title></title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
Кол-во подписчиков: <input type="text" id="load100" value="20" size="10px">
<p>Сдвиг: <input type="text" id="offset" value="0" size="10px"></p>
<button id="loadAll">Загрузить подписчиков</button>
<p><button id="loadBan">Выбрать заблокированных</button></p>
<!-- <p id="schet">'Показаны подписчики с' +OffMin+ 'по' +OffMax+;</p>
-->
<ul></ul>
<script src="jquery.min.js"></script>
<script src="vk.js"></script>
<script>
$('#loadAll').on('click', loadFriends);
$('#loadBan').on('click', loadBanFriends);
var PerLoad100 = document.getElementById('load100');
var OffSet = document.getElementById('offset');
// var OffMin = +OffSet.value +1;
// var OffMax = PerLoad100.value
// var Schet = document.getElementById('schet');
// schet.innerHTML+= "'Показаны подписчики с' +OffMin+ 'по' +OffMax+;"
// function RemoveUser() {
// sendRequest('groups.removeUser', { group_id: 129549953, user_id: g.id}, function (data) {
// drawBanFriends(data);
// console.log(data);
// });
// }
// Вывод удаленных/забанненых
function drawBanFriends(items){
var html = '';
for (var i = 0; i < items.length; i++) {
g = items[i];
var online = g.online ? '<span style="color:green">Online</span>' : '<span style="color:#ff0000">Offline</span>';
var deactivate = g.deactivated ? g.deactivated : '';
if (deactivate == 'deleted') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь удалил страницу</p>'
+'<button> Написать </button>'
+ '</div>'
+'</a>'
+'</li>';
} else if (deactivate == 'banned') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь заблокирован</p>'
+ '</div>'
+'</a>'
+'<button id="del1"> Удалить2 </button>'
+'</li>';
} else {
deactivate = '';
}
}
$('ul').html(html);
$('#del1').on('click', removeUser);
}
// Вывод списка подписчиков на страницу
function drawFriends(items){
var html = '';
for (var i = 0; i < items.length; i++) {
var g = items[i];
var online = g.online ? '<span style="color:green">Online</span>' : '<span style="color:#ff0000">Offline</span>';
var deactivate = g.deactivated ? g.deactivated : '';
if (deactivate == 'deleted') {
deactivate = 'Страница удалена пользователем';
} else if (deactivate == 'banned'){
deactivate = 'Страница заблокирована';
} else {
deactivate = '';
}
html +=
'<li>'+
'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>'+deactivate+'</p>'
+'<button> Написать </button>'
+ '</div>'
+'</a>'
+'</li>';
}
$('ul').html(html);
}
</script>
</body>
</html>
Функции:
// Генерация URL запроса
function getUrl(method,params) {
if (!method) throw new Error ('Вы не указали метод!');
params = params || {};
params['access_token'] = 'тут токен';
return 'https://api.vk.com/method/'+ method +'?' + $.param(params) + '&v=5.52';
}
// отправка запроса
function sendRequest(method,params, func){
$.ajax({
url: getUrl(method, params),
method: 'GET',
dataType: 'JSONP',
success: func
});
}
// Вывод всех юзеров
function loadFriends() {
sendRequest('groups.getMembers', {group_id: 148888375, count: PerLoad100.value, offset: OffSet.value, fields: 'photo_100,online,deactivated'}, function (data) {
drawFriends(data.response.items, data.response.count);
console.log(data);
});
}
// Вывод забаненых
function loadBanFriends() {
sendRequest('groups.getMembers', { group_id: 148888375, count: PerLoad100.value, offset: OffSet.value, fields: 'photo_100,online,deactivated'}, function (data) {
drawBanFriends(data.response.items);
console.log(data);
});
}
// Удаление юзера
function removeUser(items) {
sendRequest('groups.removeUser', { group_id: 148888375, user_id: g.id}, function (data) {
drawBanFriends(data.response);
console.log(g.id);
});
}
Мне кажется, что проблема именно в removeUser(items), но не могу понять какая(((
|
|
01.04.2020, 01:43
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
Desantnik3,
строка 102 (html) сработает только для первой кнопки, id это уникальный идентификатор.
строка 49 (js) откуда данные user_id: g.id?
|
|
01.04.2020, 02:01
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
Сообщение от рони
|
Desantnik3,
строка 102 (html) сработает только для первой кнопки, id это уникальный идентификатор.
строка 49 (js) откуда данные user_id: g.id?
|
По 102 строке, спасибо!)) Действительно работает только первая кнопка.
по строке 49: переменная "g" вот отсюда:
function drawBanFriends(items){
var html = '';
for (var i = 0; i < items.length; i++) {
g = items[i];
а id получает уже непосредственно из АПИ, насколько я понимаю
|
|
01.04.2020, 02:08
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
так, как я понял, функция удаляет только последний id из цикла... А как сделать, чтоб она могла удалять любой?
|
|
01.04.2020, 02:24
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
Desantnik3,
попробуйте так
// Вывод удаленных/забанненых
function drawBanFriends(items){
var html = '';
items.forEach(function(g) {
var online = g.online ? '<span style="color:green">Online</span>' : '<span style="color:#ff0000">Offline</span>';
var deactivate = g.deactivated ? g.deactivated : '';
if (deactivate == 'deleted') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь удалил страницу</p>'
+'<button> Написать </button>'
+ '</div>'
+'</a>'
+'</li>';
} else if (deactivate == 'banned') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь заблокирован</p>'
+ '</div>'
+'</a>'
+'<button class="del" data-id="'+g.id+'"> Удалить2 </button>'
+'</li>';
} else {
deactivate = '';
}
})
$('ul').html(html);
$('.del').on('click', function() { console.log(this.dataset.id);
sendRequest('groups.removeUser', { group_id: 148888375, user_id: this.dataset.id}, function (data) {
drawBanFriends(data.response);
});
});
}
|
|
01.04.2020, 02:43
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
Сообщение от рони
|
Desantnik3,
попробуйте так
// Вывод удаленных/забанненых
function drawBanFriends(items){
var html = '';
items.forEach(function(g) {
var online = g.online ? '<span style="color:green">Online</span>' : '<span style="color:#ff0000">Offline</span>';
var deactivate = g.deactivated ? g.deactivated : '';
if (deactivate == 'deleted') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь удалил страницу</p>'
+'<button> Написать </button>'
+ '</div>'
+'</a>'
+'</li>';
} else if (deactivate == 'banned') {
deactivate = html +=
'<li>'
+'<a target = "_blank" href="http://vk.com/id'+ g.id +'">'
+'<img src = "'+g.photo_100+'"/>'
+'<div>'
+'<h4>'+ g.first_name +' '+ g.last_name +'</h4>'
+'<p>'+online+'</p>'
+'<p>Пользователь заблокирован</p>'
+ '</div>'
+'</a>'
+'<button class="del" data-id="'+g.id+'"> Удалить2 </button>'
+'</li>';
} else {
deactivate = '';
}
})
$('ul').html(html);
$('.del').on('click', function() { console.log(this.dataset.id);
sendRequest('groups.removeUser', { group_id: 148888375, user_id: this.dataset.id}, function (data) {
drawBanFriends(data.response);
});
});
}
|
index.html:54 Uncaught TypeError: items.forEach is not a function
at drawBanFriends (index.html:54)
at Object.success (index.html:90)
at i (jquery.min.js:2)
at Object.fireWith [as resolveWith] (jquery.min.js:2)
at A (jquery.min.js:4)
at HTMLScriptElement.c (jquery.min.js:4)
at HTMLScriptElement.dispatch (jquery.min.js:3)
|
|
01.04.2020, 08:28
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
Desantnik3,
а так?
[...items].forEach
|
|
01.04.2020, 08:50
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
Сообщение от рони
|
Desantnik3,
а так?
[...items].forEach
|
Так выдает это:
index.html:54 Uncaught TypeError: number 1 is not iterable (cannot read property Symbol(Symbol.iterator))
|
|
01.04.2020, 09:28
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,130
|
|
Desantnik3,
замените строки
+'<button id="del1"> Удалить2 </button>'
на
+'<button class="del" data-id="'+g.id+'"> Удалить2 </button>'
и $('#del1').on('click', removeUser);
на
$('.del').on('click', function() { console.log(this.dataset.id);
sendRequest('groups.removeUser', { group_id: 148888375, user_id: this.dataset.id}, function (data) {
drawBanFriends(data.response);
});
});
в изначальном коде
|
|
01.04.2020, 13:03
|
Новичок на форуме
|
|
Регистрация: 01.04.2020
Сообщений: 7
|
|
Сообщение от рони
|
Desantnik3,
замените строки
+'<button id="del1"> Удалить2 </button>'
на
+'<button class="del" data-id="'+g.id+'"> Удалить2 </button>'
и $('#del1').on('click', removeUser);
на
$('.del').on('click', function() { console.log(this.dataset.id);
sendRequest('groups.removeUser', { group_id: 148888375, user_id: this.dataset.id}, function (data) {
drawBanFriends(data.response);
});
});
в изначальном коде
|
Отлично! Работает, спасибо!!!
|
|
|
|