Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2020, 00:24
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 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), но не могу понять какая(((
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2020, 01:43
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Desantnik3,
строка 102 (html) сработает только для первой кнопки, id это уникальный идентификатор.
строка 49 (js) откуда данные user_id: g.id?
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2020, 02:01
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 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 получает уже непосредственно из АПИ, насколько я понимаю
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2020, 02:08
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 01.04.2020
Сообщений: 7

так, как я понял, функция удаляет только последний id из цикла... А как сделать, чтоб она могла удалять любой?
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2020, 02:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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);
	});
   });
}
Ответить с цитированием
  #6 (permalink)  
Старый 01.04.2020, 02:43
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 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)
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2020, 08:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Desantnik3,
а так?
[...items].forEach
Ответить с цитированием
  #8 (permalink)  
Старый 01.04.2020, 08:50
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 01.04.2020
Сообщений: 7

Сообщение от рони Посмотреть сообщение
Desantnik3,
а так?
[...items].forEach
Так выдает это:
index.html:54 Uncaught TypeError: number 1 is not iterable (cannot read property Symbol(Symbol.iterator))
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2020, 09:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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

в изначальном коде
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2020, 13:03
Новичок на форуме
Отправить личное сообщение для Desantnik3 Посмотреть профиль Найти все сообщения от Desantnik3
 
Регистрация: 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);
	});
   });

в изначальном коде
Отлично! Работает, спасибо!!!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужна помощь в реализации 2 ArtemGavrilenko Элементы интерфейса 1 21.05.2014 17:30
Нужна помощь по javascript darklend Общие вопросы Javascript 0 12.01.2014 23:33
Нужна помощь: Slider wheel Alex555 Мобильный JavaScript 0 15.05.2013 18:06
Нужна помощь по слайдеру seoguru Работа 3 28.01.2013 22:02
нужна помощь dominosoko Серверные языки и технологии 4 14.03.2010 02:17