Как обновить атрибут данных на Ajax Complete

Я использую October CMS, и в рамках я могу сделать вызов AJAX, используя следующий элемент HTML:

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'0'">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

Всякий раз, когда эта ссылка нажимается на кнопку избранного, срабатывает обновление контроллера «onSavedeal». Обновление базы данных отлично работает с первого клика. Однако после обновления значение атрибута data-request-data не обновляется, поэтому кнопка не работает при последующих нажатиях.

Мне нужно изменить ссылку, чтобы «активный: '0'» стал «активным: '1'». Результирующий полный элемент будет

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'1'">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

В рамках я могу добавить еще один атрибут под названием «данные-запрос-успех», который выполняет функцию (или код) javascript до успешного завершения вызова AJAX. Как я могу создать функцию с именем «updateactive()», которая будет переключать активное значение между 0 и 1. Последний элемент должен выглядеть так:

<a href="#" class="sbutton" data-request="onSavedeal" 
     data-request-data="deal_ID:'14779255',type:'local',active:'0'"
     data-reuqest-success="updateactive();">
    <i class="material-icons pink-text listfavorite">favorite</i>                      
</a>

person user2694306    schedule 28.02.2016    source источник


Ответы (2)


Если вы можете безопасно идентифицировать этот элемент a по атрибуту data-request со значением onSavedeal, вы должны написать функцию updateactive следующим образом:

function updateactive() {
    var newAttrValue = "deal_ID:'14779255',type:'local',active:'1'";
    $('[data-request="onSavedeal"]').attr('data-request-data', newAttrValue);
 }

Не забудьте исправить data-reuqest-success на data-request-success.

ОБНОВЛЕНИЕ Если на странице много элементов a, вы можете повторно использовать одну и ту же функцию, как показано ниже. Посмотрите демо - Fiddle.

function updateactive() {
    var clickedA = event.currentTarget,
        newAttrValue = $(clickedA).attr('data-request-data').replace("active:'0'", "active:'1'");

    $(clickedA).attr('data-request-data', newAttrValue);
}
person Nikolay Ermakov    schedule 28.02.2016
comment
Проблема в этом случае состоит из сотен сделок, поэтому создание отдельной функции javascript для каждой из них невозможно. Кроме того, это оставит newAttrValue статическим, поскольку страница не перезагружается после вызова Ajax. - person user2694306; 28.02.2016
comment
Можно ли решить эту проблему, получив текущее значение атрибута data-request-data нажатого a и просто заменив active:'0' на active:'1'? - person Nikolay Ermakov; 28.02.2016
comment
будет ли event определено? - person Rajshekar Reddy; 28.02.2016
comment
Да, это будет. Вы можете проверить мою скрипку, чтобы убедиться. Исследуйте рассматриваемый атрибут до и после клика. - person Nikolay Ermakov; 28.02.2016
comment
Спасибо. Однако я не понимаю, как ваш ответ добавляет решения. Вы только что немного сократили мой ответ? - person Nikolay Ermakov; 28.02.2016

Внесите изменения в свой тег привязки таким образом

<a href="#" class="sbutton" data-request="onSavedeal" 
 data-request-data="deal_ID:'14779255',type:'local',active:'0'"
 data-reuqest-success="updateactive(this);">
<i class="material-icons pink-text listfavorite">favorite</i>                      

Note the change updateactive(this);

Затем в вашем jquery вы можете получить определение функции таким образом.

 function updateactive(element) {        
    $(element).attr('data-request-data', $(element).attr('data-request-data').replace("active:'0'", "active:'1'"));
}
person Rajshekar Reddy    schedule 28.02.2016