Нет необходимости полагаться на разбор строки запроса, когда доступны скрипты на стороне сервера. Вместо этого, когда страница первоначально обслуживается, организуйте для PHP запись значения group_id
в (например) скрытое поле ввода, которое затем становится доступным на стороне клиента для чтения в javascript / jQuery. (Другие методы доступны)
Также неплохо организовать для своего сценария "groupnotifications.php" получение инструкции $ _POST ['action'] для подписки или отписки. Таким образом, клиентская часть приложения осуществляет контроль.
С этими изменениями код будет выглядеть примерно так:
$(function() {
$("#subscribe").click(function(){
var $s = $(this).attr('disabled',true);//disable button until ajax response received to prevent user clicking again
var clss = ['not_subscribed_group','notifications_subsc'];//The two classnames that are to be toggled.
var dataOj = {
owner : $s.closest(".groupContainer").find('.group_id').val(),//relating to element <input class="group_id" type="hidden" value="..." />
action : ($s.hasClass(clss[0])) ? 1 : 0;//Instruction to 1:subscribe or 0:unsubscribe
};
$.ajax({
type: "POST",
url: "groupnotifications.php",
data: dataObj,
success: function(status) {//status = 1:subscribed or 0:unsubscribed
switch(Number(status)){
case 1:
$s.removeClass(clss[1]).addClass(clss[0]);
break;
case 0:
$s.removeClass(clss[0]).addClass(clss[1]);
break;
default:
//display error message to user
}
}
error: function(){
//display error message to user
}
complete: function(){
$s.attr('disabled',false);
}
});
});
});
непроверенных
Примечание. Оператор $s.closest(".groupContainer").find('.group_id').val()
основан на скрытом элементе ввода, имеющем class="group_id"
, и допускает создание нескольких групп, каждая со своим собственным действием переключения, на одной странице. Просто убедитесь, что каждая группа заключена в элемент (например, div или td) с class="groupContainer"
.