Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужна помощь по ВК АПИ (https://javascript.ru/forum/misc/79844-nuzhna-pomoshh-po-vk-api.html)

Desantnik3 01.04.2020 00:24

Нужна помощь по ВК АПИ
 
Друзья, в общем, я новичок, сильно не матюкайтесь))
Пишу скрипт для управления подписчиками сообщества и запнулся на этапе удаления подписчиков из группы. Суть в том, что нужно удалять конкретного юзера по нажатию кнопки, но почему-то удаляется рандомный юзер... Что делаю не так?

Код:
<!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

Desantnik3,
строка 102 (html) сработает только для первой кнопки, id это уникальный идентификатор.
строка 49 (js) откуда данные user_id: g.id?

Desantnik3 01.04.2020 02:01

Цитата:

Сообщение от рони (Сообщение 522014)
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 получает уже непосредственно из АПИ, насколько я понимаю

Desantnik3 01.04.2020 02:08

так, как я понял, функция удаляет только последний id из цикла... А как сделать, чтоб она могла удалять любой?

рони 01.04.2020 02:24

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);
	});
   });
}

Desantnik3 01.04.2020 02:43

Цитата:

Сообщение от рони (Сообщение 522017)
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

Desantnik3,
а так?
[...items].forEach

Desantnik3 01.04.2020 08:50

Цитата:

Сообщение от рони (Сообщение 522021)
Desantnik3,
а так?
[...items].forEach

Так выдает это:
index.html:54 Uncaught TypeError: number 1 is not iterable (cannot read property Symbol(Symbol.iterator))

рони 01.04.2020 09:28

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);
	});
   });

в изначальном коде

Desantnik3 01.04.2020 13:03

Цитата:

Сообщение от рони (Сообщение 522026)
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);
	});
   });

в изначальном коде

Отлично! Работает, спасибо!!!


Часовой пояс GMT +3, время: 10:16.